| nbdfuse(1) | LIBNBD | nbdfuse(1) |
نام (NAME)
nbdfuse - سوار کردن یک دستگاه بلوکی شبکه در سیستمفایل محلی
خلاصه دستور (SYNOPSIS)
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" استفاده کنید.
مثالها (EXAMPLES)
ارائه یک سرور NBD دوردست به عنوان یک فایل محلی
اگر یک سرور 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
استفاده از nbdkit برای ایجاد فایلی مبتنی بر RAM disk موقت
با استفاده از "[ ... ]" میتوانید یک سرور 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 برای خواندن و ویرایش یک فایل qcow2
میتوانید از 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 دسترسی یابد، بنابراین در سناریوهای واقعی این روش ترجیح داده میشود.
گزینهها (OPTIONS)
- --help
- نمایش راهنمای مختصر خط فرمان و خروج.
- -C N
- --connections N
- در صورت
استفاده از
multi-conn، از N
اتصال به
سرور
استفاده
میکند.
پیشفرض 4
است.
قابلیت multi-conn در صورت امکان بهطور پیشفرض فعال است. حالتهایی که یک زیرپروسه را اجرا میکنند، مانند --command، قادر به استفاده از multi-conn نیستند. حالت --fd نیز نمیتواند از multi-conn استفاده کند. همچنین سرور باید قابلیت multi-conn را اعلان کند (از nbdinfo(1) برای بررسی پشتیبانی سرور استفاده کنید).
بخش "THREAD MODEL" در زیر را ببینید.
- -C 1
- --connections 1
- غیرفعال کردن multi-conn. فقط از یک اتصال منفرد به سرور NBD استفاده میشود. بخش "THREAD MODEL" در زیر را ببینید.
- --fuse-help
- نمایش گزینههای FUSE و خروج. گزینهٔ -o در زیر را ببینید.
- -o FUSE-OPTION
- ارسال
گزینههای
اضافی به FUSE.
برای
دریافت
فهرستی از
تمام
گزینههای
اضافی
پشتیبانیشده
توسط FUSE، از
--fuse-help
استفاده
کنید.
برخی از گزینههای بالقوه مفید FUSE:
- -o allow_other
- اجازه به سایر کاربران برای مشاهدهٔ سیستمفایل. این گزینه هیچ اثری ندارد مگر اینکه آن را بهصورت سراسری در /etc/fuse.conf فعال کنید.
- -o kernel_cache
- اجازه به هسته برای کَش کردن فایلها (کاهش تعداد خواندنهایی که باید از طریق API مربوط به libnbd(3) انجام شوند). اگر توانایی مصرف حافظهٔ اضافی را دارید، این گزینه عموماً ایدهٔ خوبی است.
- -o uid=N
- -o gid=N
- از این گزینهها برای نگاشت UIDها و GIDها استفاده کنید.
- -P PIDFILE
- --pidfile PIDFILE
- هنگامی که nbdfuse آمادهٔ سرویسدهی شد، شناسهٔ فرایند (PID) مربوط به nbdfuse را در PIDFILE مینویسد. این قابلیت میتواند در اسکریپتها برای انتظار تا زمان آماده شدن nbdfuse به کار رود. توجه داشته باشید که نباید سعی کنید nbdfuse را متوقف (kill) کنید. از "fusermount3 -u" برای پیاده کردن نقطهٔ اتصال استفاده کنید که باعث خروج تمیز nbdfuse خواهد شد.
- -r
- --readonly
- دسترسی به
دستگاه
بلوکی شبکه
بهصورت
فقطخواندنی.
فایل مجازی
دارای
دسترسیهای
فقطخواندنی
خواهد بود و
هرگونه
عملیات
نوشتن، خطا
بازمیگرداند.
اگر سرور NBD دوردست فقطخواندنی باشد، این پرچم بهطور خودکار افزوده میشود. (فیلد "is_read_only:" را در خروجی nbdinfo(1) بررسی کنید).
- -s
- استفاده از عملیات تکریسهای FUSE. بخش "THREAD MODEL" در زیر را ببینید.
- -v
- --verbose
- -d
- فعالسازی پیامهای پرگو (verbose) در stderr. این کار، اشکالزدایی libnbd و سایر پیامها را فعال میکند. گزینهٔ -d یک نام مستعار است که برای سازگاری با سایر برنامههای FUSE استفاده میشود.
- -V
- --version
- نمایش نام بسته و نسخه و سپس خروج..SH "حالتها (MODES)" از حالتها برای انتخاب سرور NBD استفاده میشود. حالتهای ممکن عبارتند از:
- nbdfuse MOUNTPOINT URI
- این حالت از
یک 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
- nbdfuse MOUNTPOINT [ CMD [ARGS ...] ]
- اجرای یک سرور NBD به عنوان یک زیرفرایند (subprocess). در این حالت یک سرور NBD میتواند به صورت مستقیم از خط فرمان اجرا شود و nbdfuse از طریق یک سوکت با سرور ارتباط برقرار کند. این امر مستلزم آن است که سرور NBD از فعالسازی سوکت توسط systemd پشتیبانی کند. بخش «مثالها (EXAMPLES)» در بالا و nbd_connect_systemd_socket_activation(3) را ببینید.
- nbdfuse MOUNTPOINT --command CMD [ARGS ...]
- انتخاب حالت فرمان. در این حالت یک سرور NBD میتواند مستقیماً از خط فرمان اجرا شود و nbdfuse از طریق stdin/stdout سرور با آن ارتباط برقرار کند. بهطور معمول این حالت را همراه با "nbdkit -s" به کار میبرید. nbd_connect_command(3) را ببینید.
- nbdfuse MOUNTPOINT --fd N
- انتخاب حالت توصیفگر فایل (file descriptor). در این حالت یک سوکت متصلشده به nbdfuse ارسال میشود. nbdfuse به سوکت روی توصیفگر فایل شمارهگذاریشده متصل میشود. همچنین nbd_connect_socket(3) را ببینید.
- nbdfuse MOUNTPOINT --tcp HOST PORT
- انتخاب حالت TCP. اتصال به یک سرور NBD روی یک میزبان و درگاه از طریق یک سوکت TCP رمزنگارینشده. همچنین nbd_connect_tcp(3) را ببینید.
- nbdfuse MOUNTPOINT --unix SOCKET
- انتخاب حالت یونیکس. اتصال به یک سرور NBD روی یک سوکت دامنه یونیکس (Unix domain socket). همچنین nbd_connect_unix(3) را ببینید.
- nbdfuse MOUNTPOINT --vsock CID PORT
- انتخاب حالت vsock. اتصال به یک سرور NBD روی یک سوکت "AF_VSOCK". همچنین nbd_connect_vsock(3) را ببینید.
مدل ریسهها (THREAD MODEL)
این بخش نحوه کارکرد نسخه کنونی 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 تنها یک ریسه را اجرا کند، اما همچنان ممکن است چندین ریسه عملیاتی وجود داشته باشد.
نکات (NOTES)
اتصال حلقهای (Loop mounting)
وسوسهانگیز (و شدنی) است که فایل را با دستگاه حلقه (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) استفاده کنید.
مقایسه با سایر ابزارها (COMPARISON TO OTHER TOOLS)
در مقایسه با "nbd-client"
این برنامه از نظر مفهومی مشابه nbd-client(8) است (که NBD را به گرههای دستگاهی /dev/nbdX تبدیل میکند)، با این تفاوتها که:
- ابزار nbd-client سریعتر است زیرا از یک ماژول ویژه در هسته استفاده میکند
- ابزار nbd-client به کاربر ریشه (root) نیاز دارد، اما nbdfuse توسط هر کاربری قابل استفاده است
- فایلهای مجازی nbdfuse را میتوان در هر کجای سیستمفایل سوار (mount) کرد
- ابزار nbdfuse از libnbd برای ارتباط با سرور NBD استفاده میکند
- ابزار nbdfuse به پشتیبانی FUSE در هسته نیاز دارد
در مقایسه با "qemu-nbd"
دستور qemu-nbd(8) نیز میتواند خود را به گرههای دستگاهی /dev/nbdX متصل کند. تفاوتهای آن با nbdfuse مشابه موارد ذکرشده در بالا است.
همچنین ببینید (SEE ALSO)
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).
نویسندگان (AUTHORS)
Richard W.M. Jones
کپیرایت و تکثیر (COPYRIGHT)
Copyright Red Hat
مجوز (LICENSE)
این کتابخانه یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط «مجوز عمومی همگانی کمتر گنو» (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 |