NFSDCLD(8) دستورات مدیریت سیستم NFSDCLD(8)

nfsdcld - دیمن ردیابی کلاینتهای سرور NFSv4

nfsdcld [-d] [-F] [-p مسیر] [-s پوشه_ذخیره‌سازی]

دیمن nfsdcld مسئول ثبت و نگهداری وضعیت کلاینتهای NFS نسخه ۴ در سرور است. اجرای این دیمن روی سیستم‌هایی که به عنوان سرور NFSv4 عمل نمی‌کنند ضرورتی ندارد.

هنگامی که تفکیک و قطعی شبکه با راه‌اندازی مجدد سرور هم‌زمان شود، شرایط مرزی خاصی به وجود می‌آید که ممکن است سرور اقدام به بازپس‌دهی قفل‌ها (lock reclaims) کند، در حالی که سایر کلاینت‌ها در این فاصله قفل‌های متداخل ایجاد کرده‌اند. توضیح دقیق‌تر این مسئله در استاندارد RFC 3530، بخش ۸.۶.۳ شرح داده شده است.

برای جلوگیری از این مشکلات، سرور باید مقدار کمی از اطلاعات مربوط به هر کلاینت را در یک فضای ذخیره‌سازی پایدار ردیابی و نگهداری کند. این دیمن بخش مربوط به فضای کاربری (userspace) این قابلیت را فراهم می‌سازد.

فعال‌سازی گزارش‌گیری در سطح اشکال‌زدایی (debug).
اجرای دیمن در پیش‌زمینه و چاپ تمامی خروجی‌ها در خطای استاندارد (stderr).
محل فایل‌سیستم rpc_pipefs. مقدار پیش‌فرض /var/lib/nfs/rpc_pipefs است.
پوشه‌ای که اطلاعات ذخیره‌سازی پایدار باید در آن نگهداری شود. مقدار پیش‌فرض /var/lib/nfs/nfsdcld است.

مقادیر زیر در بخش [nfsdcld] از فایل پیکربندی /etc/nfs.conf شناسایی می‌شوند:

معادل -s/--storagedir.
تنظیم «debug = 1» معادل -d/--debug است.

علاوه بر این، مقدار زیر از بخش [general] شناسایی می‌شود:

معادل -p/--pipefsdir.

سرور NFSv4 در هسته لینوکس از نظر تاریخی این اطلاعات را روی فضای ذخیره‌سازی پایدار با دستکاری مستقیم اطلاعات فایل‌سیستم، در دایرکتوری مشخص‌شده توسط /proc/fs/nfsd/nfsv4recoverydir ردیابی می‌کرد.

این سازوکار با معرفی اولیه فراخوانی به فضای کاربر (upcall) دیمن nfsdcld در نسخه ۳.۴ هسته تغییر کرد، که بعداً به نفع برنامه usermodehelper با نام nfsdcltrack(8) منسوخ شد (پشتیبانی از آن در نسخه ۳.۸ هسته افزوده شده بود). با این حال، از آنجا که فراخوانی usermodehelper درون کانتینرها کار نمی‌کند، پشتیبانی از نسخه جدیدی از فراخوانی nfsdcld در نسخه ۵.۲ هسته افزوده شد.

این دیمن به هسته‌ای نیاز دارد که از فراخوانی nfsdcld پشتیبانی کند. در هسته‌های قدیمی‌تر، اگر کد سنتی ردیابی نام کلاینت در حال استفاده بود، هسته لوله (pipe) ارتباطی مورد استفاده nfsdcld با هسته را ایجاد نمی‌کرد. در هسته‌های جدیدتر، nfsd تلاش می‌کند ردیابی کلاینت را به این ترتیب راه‌اندازی کند: ابتدا فراخوانی nfsdcld، سپس فراخوانی usermodehelper دیمن nfsdcltrack، و در نهایت ردیابی سنتی کلاینت.

این دیمن باید با دسترسی کاربر ریشه (root) اجرا شود، زیرا لوله ارتباطی با هسته تنها توسط root قابل دسترسی است. البته دیمن پس از راه‌اندازی، تمام دسترسی‌های کاربر ارشد را رها می‌کند. به همین دلیل، مالکیت storagedir باید متعلق به root بوده و برای مالک قابل خواندن و نوشتن باشد.

این دیمن اکنون از نسخه‌های متفاوتی از upcall پشتیبانی می‌کند تا هسته بتواند داده‌های اضافی را جهت ذخیره در پایگاه‌داده روی دیسک ارسال کند. هسته نسخه upcall مورد پشتیبانی را هنگام راه‌اندازی ردیابی کلاینت از nfsdcld استعلام می‌کند. پس از ارتقای nfsdcld راه‌اندازی مجدد nfsd الزامی نیست، اما nfsd تا زمان شروع مجدد از نسخه upcall جدیدتر استفاده نخواهد کرد. پس از تنزیل (downgrade) نسخه nfsdcld، راه‌اندازی مجدد nfsd الزامی است تا اطمینان حاصل شود که nfsd از نسخه‌ای از upcall که توسط nfsdcld پشتیبانی نمی‌شود استفاده نکند. علاوه بر این، تنزیل nfsdcld مستلزم تنزیل ساختار (schema) پایگاه‌داده روی دیسک نیز هست که می‌توان آن را با ابزار nfsdclddb(8) انجام داد.

/var/lib/nfs/nfsdcld/main.sqlite

nfsdcltrack(8), nfsdclddb(8)

دیمن nfsdcld توسط Jeff Layton <jlayton@redhat.com> با اصلاحات Scott Mayhew <smayhew@redhat.com> توسعه یافته است.

مه ۲۰۲۵ nfs-utils