nbdfuse(1) LIBNBD nbdfuse(1)

nbdfuse - سوار کردن یک دستگاه بلوکی شبکه در سیستم‌فایل محلی

nbdfuse [-C N|--connections N] [-d] [-o FUSE-OPTION] [-P PIDFILE]
        [-r] [-s] [-v|--verbose]
        MOUNTPOINT[/FILENAME] URI
nbdfuse MOUNTPOINT[/FILENAME] [ CMD [ARGS ...] ]
nbdfuse MOUNTPOINT[/FILENAME] --command CMD [ARGS ...]
nbdfuse MOUNTPOINT[/FILENAME] --fd N
nbdfuse MOUNTPOINT[/FILENAME] --tcp HOST PORT
nbdfuse MOUNTPOINT[/FILENAME] --unix SOCKET
nbdfuse MOUNTPOINT[/FILENAME] --vsock CID PORT

برای پیاده‌کردن:

fusermount3 -u MOUNTPOINT

سایر گزینه‌ها:

nbdfuse --help
nbdfuse --fuse-help
 nbdfuse -V|--version
ابزار nbdfuse برای سوار کردن (mount) یک Network Block Device (NBD) در سیستم‌فایل محلی به کار می‌رود. فایل مجازی NBD در MOUNTPOINT/FILENAME (به‌طور پیش‌فرض MOUNTPOINT/nbd) سوار می‌شود. عملیات خواندن و نوشتن روی این فایل مجازی به خواندن و نوشتن روی دستگاه NBD تبدیل می‌شوند.
در nbdfuse نسخه ۱.۶ یا بالاتر، همچنین می‌توانید با سوار کردن روی هر فایل عادی با نام MOUNTPOINT یک نقطه اتصال «عریان» (naked) ایجاد کنید (محتویات فعلی فایل اهمیتی ندارد).
خود سرور NBD می‌تواند محلی یا دوردست باشد. سرور را می‌توان به‌صورت یک NBD URI (مانند "nbd://localhost")، یا به‌صورت یک سرور NBD که به شکل یک زیرفرایند (subprocess) از nbdfuse اجرا می‌شود (با استفاده از "[ ... ]")، یا به روش‌های گوناگون دیگر مشخص کرد (بخش "MODES" را ببینید).
برای پیاده کردن (unmount) سیستم‌فایل پس از استفاده، از دستور "fusermount3 -u MOUNTPOINT" استفاده کنید.

اگر یک سرور NBD دوردست روی "example.com" و روی درگاه پیش‌فرض NBD (شماره ۱۰۸۰۹) در حال اجرا باشد، می‌توانید با انجام دستورهای زیر آن را به یک فایل محلی تبدیل کنید:

$ mkdir dir
$ nbdfuse dir nbd://example.com &
$ ls -l dir/
total 0
-rw-rw-rw-. 1 nbd nbd 1073741824 Jan  1 10:10 nbd

نام این فایل dir/nbd است و می‌توانید مانند یک فایل عادی روی آن بخوانید و بنویسید. توجه داشته باشید که نوشتن روی این فایل، روی سرور NBD دوردست نوشته خواهد شد. پس از استفاده، آن را پیاده کنید:

$ fusermount3 -u dir
$ rmdir dir

با استفاده از "[ ... ]" می‌توانید یک سرور NBD را به عنوان یک زیرفرایند اجرا کنید. در این مثال، از nbdkit(1) برای ایجاد یک فایل موقت مبتنی بر یک RAM disk استفاده شده است:

$ mkdir dir
$ nbdfuse dir/ramdisk [ nbdkit --exit-with-parent memory 1G ] &
$ ls -l dir/
total 0
-rw-rw-rw-. 1 nbd nbd 1073741824 Jan  1 10:10 ramdisk
$ dd if=/dev/urandom bs=1M count=100 of=mp/ramdisk conv=notrunc,nocreat
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 2.08319 s, 50.3 MB/s

هنگامی که کارتان با RAM disk تمام شد، می‌توانید آن را به صورت زیر پیاده کنید که باعث خروج nbdkit و دور ریخته شدن محتویات RAM disk می‌شود:

$ fusermount3 -u dir
$ rmdir dir

می‌توانید از qemu-nbd(8) به عنوان یک زیرفرایند برای باز کردن هر قالب فایلی که qemu پشتیبانی می‌کند استفاده کنید:

$ mkdir dir
$ nbdfuse dir/file.raw [ qemu-nbd -f qcow2 file.qcow2 ] &
$ ls -l dir/
total 0
-rw-rw-rw-. 1 nbd nbd 1073741824 Jan  1 10:10 file.raw

فایل dir/file.raw با قالب raw و مبتنی بر file.qcow2 است. هر تغییری در dir/file.raw اعمال شود، در فایل qcow2 منعکس خواهد شد. برای پیاده کردن فایل دستور زیر را اجرا کنید:

 $ fusermount3 -u dir
 $ rmdir dir
دستور nbdkit(1) قادر است هم به ایمیج‌های دیسک دوردست روی وب‌سرورها دسترسی داشته باشد و هم آن‌ها را به‌طور شفاف از حالت فشرده خارج کند؛ بنابراین می‌توانید آن‌ها را به فایل‌های مجازی تبدیل کنید:
$ mkdir dir
$ nbdfuse dir/disk.iso \
      [ nbdkit --exit-with-parent \
               curl --filter=xz \
               http://builder.libguestfs.org/fedora-30.xz ] &
$ ls -l dir/
total 0
-rw-rw-rw-. 1 nbd nbd 6442450944 Jan  1 10:10 disk.iso
$ file dir/disk.iso
dir/disk.iso: DOS/MBR boot sector
$ qemu-system-x86_64 -m 4G \
      -drive file=dir/disk.iso,format=raw,if=virtio,snapshot=on
$ fusermount3 -u dir

در این مثال، ما از فایل مجازی برای بوت کردن qemu استفاده کرده‌ایم، اما qemu می‌تواند بسیار کارآمدتر و به‌طور مستقیم به سرورهای NBD دسترسی یابد، بنابراین در سناریوهای واقعی این روش ترجیح داده می‌شود.

نمایش راهنمای مختصر خط فرمان و خروج.
در صورت استفاده از multi-conn، از N اتصال به سرور استفاده می‌کند. پیش‌فرض 4 است.

قابلیت multi-conn در صورت امکان به‌طور پیش‌فرض فعال است. حالت‌هایی که یک زیرپروسه را اجرا می‌کنند، مانند --command، قادر به استفاده از multi-conn نیستند. حالت --fd نیز نمی‌تواند از multi-conn استفاده کند. همچنین سرور باید قابلیت multi-conn را اعلان کند (از nbdinfo(1) برای بررسی پشتیبانی سرور استفاده کنید).

بخش "THREAD MODEL" در زیر را ببینید.

غیرفعال کردن multi-conn. فقط از یک اتصال منفرد به سرور NBD استفاده می‌شود. بخش "THREAD MODEL" در زیر را ببینید.
نمایش گزینه‌های FUSE و خروج. گزینهٔ -o در زیر را ببینید.
ارسال گزینه‌های اضافی به FUSE. برای دریافت فهرستی از تمام گزینه‌های اضافی پشتیبانی‌شده توسط FUSE، از --fuse-help استفاده کنید.

برخی از گزینه‌های بالقوه مفید FUSE:

اجازه به سایر کاربران برای مشاهدهٔ سیستم‌فایل. این گزینه هیچ اثری ندارد مگر اینکه آن را به‌صورت سراسری در /etc/fuse.conf فعال کنید.
اجازه به هسته برای کَش کردن فایل‌ها (کاهش تعداد خواندن‌هایی که باید از طریق API مربوط به libnbd(3) انجام شوند). اگر توانایی مصرف حافظهٔ اضافی را دارید، این گزینه عموماً ایدهٔ خوبی است.
از این گزینه‌ها برای نگاشت UIDها و GIDها استفاده کنید.
هنگامی که nbdfuse آمادهٔ سرویس‌دهی شد، شناسهٔ فرایند (PID) مربوط به nbdfuse را در PIDFILE می‌نویسد. این قابلیت می‌تواند در اسکریپت‌ها برای انتظار تا زمان آماده شدن nbdfuse به کار رود. توجه داشته باشید که نباید سعی کنید nbdfuse را متوقف (kill) کنید. از "fusermount3 -u" برای پیاده کردن نقطهٔ اتصال استفاده کنید که باعث خروج تمیز nbdfuse خواهد شد.
دسترسی به دستگاه بلوکی شبکه به‌صورت فقط‌خواندنی. فایل مجازی دارای دسترسی‌های فقط‌خواندنی خواهد بود و هرگونه عملیات نوشتن، خطا بازمی‌گرداند.

اگر سرور NBD دوردست فقط‌خواندنی باشد، این پرچم به‌طور خودکار افزوده می‌شود. (فیلد "is_read_only:" را در خروجی nbdinfo(1) بررسی کنید).

استفاده از عملیات تک‌ریسه‌ای FUSE. بخش "THREAD MODEL" در زیر را ببینید.
فعال‌سازی پیام‌های پرگو (verbose) در stderr. این کار، اشکال‌زدایی libnbd و سایر پیام‌ها را فعال می‌کند. گزینهٔ -d یک نام مستعار است که برای سازگاری با سایر برنامه‌های FUSE استفاده می‌شود.
نمایش نام بسته و نسخه و سپس خروج..SH "حالت‌ها (MODES)" از حالت‌ها برای انتخاب سرور NBD استفاده می‌شود. حالت‌های ممکن عبارتند از:
این حالت از یک URI مربوط به NBD استفاده می‌کند (نگاه کنید به nbd_connect_uri(3) و https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md). برای نمونه، این دستور یک اتصال رمزنگاری‌شده با TLS را به "example.com" روی درگاه 10809، با نام اکسپورت "disk" مشخص می‌کند:
nbdfuse dir nbds://example.com/disk
اجرای یک سرور NBD به عنوان یک زیرفرایند (subprocess). در این حالت یک سرور NBD می‌تواند به صورت مستقیم از خط فرمان اجرا شود و nbdfuse از طریق یک سوکت با سرور ارتباط برقرار کند. این امر مستلزم آن است که سرور NBD از فعال‌سازی سوکت توسط systemd پشتیبانی کند. بخش «مثال‌ها (EXAMPLES)» در بالا و nbd_connect_systemd_socket_activation(3) را ببینید.
انتخاب حالت فرمان. در این حالت یک سرور NBD می‌تواند مستقیماً از خط فرمان اجرا شود و nbdfuse از طریق stdin/stdout سرور با آن ارتباط برقرار کند. به‌طور معمول این حالت را همراه با "nbdkit -s" به کار می‌برید. nbd_connect_command(3) را ببینید.
انتخاب حالت توصیف‌گر فایل (file descriptor). در این حالت یک سوکت متصل‌شده به nbdfuse ارسال می‌شود. nbdfuse به سوکت روی توصیف‌گر فایل شماره‌گذاری‌شده متصل می‌شود. همچنین nbd_connect_socket(3) را ببینید.
انتخاب حالت TCP. اتصال به یک سرور NBD روی یک میزبان و درگاه از طریق یک سوکت TCP رمزنگاری‌نشده. همچنین nbd_connect_tcp(3) را ببینید.
انتخاب حالت یونیکس. اتصال به یک سرور NBD روی یک سوکت دامنه یونیکس (Unix domain socket). همچنین nbd_connect_unix(3) را ببینید.
انتخاب حالت vsock. اتصال به یک سرور NBD روی یک سوکت "AF_VSOCK". همچنین nbd_connect_vsock(3) را ببینید.

این بخش نحوه کارکرد نسخه کنونی nbdfuse را شرح می‌دهد. نسخه‌های پیشین در گذشته عملکرد متفاوتی داشتند، و نسخه‌های آتی ممکن است در آینده به‌گونه متفاوتی عمل کنند.

برنامه nbdfuse همواره چندریسه‌ای (multithreaded) است.

در صورت امکان، nbdfuse تلاش می‌کند چندین اتصال شبکه‌ای به سرور NBD باز کند (که «multi-conn» نامیده می‌شود). این کار معمولاً کارایی را بهبود می‌بخشد. برخی از مواردی که multi-conn را غیرفعال می‌کنند عبارتند از:

  • استفاده از حالت‌های "[ CMD ... ]" یا --command یا --fd
  • استفاده از -C 1
  • عدم اعلان پشتیبانی از multi-conn توسط سرور NBD (با استفاده از nbdinfo(1) بررسی کنید)

می‌توانید با استفاده از پرچم -C شمار اتصالات برقرارشده را کنترل کنید.

برنامه nbdfuse به ازای هر اتصال یک ریسه را برای سرویس‌دهی به دستورهای NBD اجرا می‌کند (این‌ها «ریسه‌های عملیاتی» یا «operation threads» نامیده می‌شوند). افزون بر این، خود FUSE چندین ریسه ایجاد می‌کند تا به درخواست‌های ارسالی از ماژول هسته fuse.ko رسیدگی کند. شمار ریسه‌هایی که FUSE می‌تواند ایجاد کند در مستندات FUSE شرح داده شده است، اما با دسترسی‌های موازی متعدد به فایل مجازی، ممکن است ریسه‌های FUSE بسیار بیشتری نسبت به ریسه‌های عملیاتی ایجاد شوند، و این امر باید به کارایی مناسب منجر شود. درخواست‌های FUSE (مانند خواندن، نوشتن یا trim) به صورت تصادفی روی ریسه‌های عملیاتی (= اتصالات) تسهیم می‌شوند. هر ریسه عملیاتی می‌تواند چندین درخواست را به صورت موازی مدیریت کند.

استفاده از پرچم -s باعث می‌شود FUSE تنها یک ریسه را اجرا کند، اما همچنان ممکن است چندین ریسه عملیاتی وجود داشته باشد.

وسوسه‌انگیز (و شدنی) است که فایل را با دستگاه حلقه (loop mount) متصل کنید. با این حال این کار بسیار کند خواهد بود و ممکن است گاهی منجر به بن‌بست (deadlock) شود. جایگزین‌های بهتر، استفاده از nbd-client(8) یا qemu-nbd(8)، یا با امنیت بیشتر libguestfs(3)، guestfish(1) یا guestmount(1) هستند که همگی می‌توانند به سرورهای NBD دسترسی داشته باشند..SS "به‌عنوان روشی برای دسترسی به سرورهای NBD" شما می‌توانید از این برای دسترسی به سرورهای NBD استفاده کنید، اما معمولاً بهتر (و قطعاً بسیار سریع‌تر) است که در عوض مستقیماً از libnbd(3) استفاده نمایید. برای دسترسی به سرورهای NBD از خط فرمان، به nbdsh(1) مراجعه کنید. برای کپی به سرور NBD و از آن، از nbdcopy(1) استفاده کنید.

این برنامه از نظر مفهومی مشابه nbd-client(8) است (که NBD را به گره‌های دستگاهی /dev/nbdX تبدیل می‌کند)، با این تفاوت‌ها که:

  • ابزار nbd-client سریع‌تر است زیرا از یک ماژول ویژه در هسته استفاده می‌کند
  • ابزار nbd-client به کاربر ریشه (root) نیاز دارد، اما nbdfuse توسط هر کاربری قابل استفاده است
  • فایل‌های مجازی nbdfuse را می‌توان در هر کجای سیستم‌فایل سوار (mount) کرد
  • ابزار nbdfuse از libnbd برای ارتباط با سرور NBD استفاده می‌کند
  • ابزار nbdfuse به پشتیبانی FUSE در هسته نیاز دارد

دستور qemu-nbd(8) نیز می‌تواند خود را به گره‌های دستگاهی /dev/nbdX متصل کند. تفاوت‌های آن با nbdfuse مشابه موارد ذکرشده در بالا است.

libnbd(3), nbdcopy(1), nbddiscard(1), nbddump(1), nbdinfo(1), nbdsh(1), nbdublk(1), nbdzero(1), fusermount3(1), mount.fuse3(8), nbd_connect_uri(3), nbd_connect_command(3), nbd_connect_socket(3), nbd_connect_systemd_socket_activation(3), nbd_connect_tcp(3), nbd_connect_unix(3), nbd_connect_vsock(3), libguestfs(3), guestfish(1), guestmount(1), nbdkit(1), nbdkit-loop(1), qemu-nbd(8), nbd-client(8).

Richard W.M. Jones

Copyright Red Hat

این کتابخانه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی کمتر گنو» (GNU Lesser General Public License) همان‌طور که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، چه نسخهٔ ۲ مجوز و چه (به انتخاب خودتان) هر نسخهٔ بالاتر دیگری، بازتوزیع کرده و/یا تغییر دهید.

این کتابخانه به این امید توزیع شده است که مفید واقع شود، اما بدون هیچ‌گونه ضمانتی؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی کمتر گنو» مراجعه کنید.

شما باید همراه با این کتابخانه نسخه‌ای از «مجوز عمومی همگانی کمتر گنو» را دریافت کرده باشید؛ در غیر این صورت، به آدرس زیر برای بنیاد نرم‌افزارهای آزاد بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

2026-07-16 libnbd-1.24.3