nbdsh(1) LIBNBD nbdsh(1)

nbdsh - پوسته دستگاه بلوکی شبکه (NBD)

$ nbdsh
Welcome to nbdsh, the shell for interacting with
Network Block Device (NBD) servers.
The ‘nbd’ module has already been imported and there
is an open NBD handle called ‘h’.
nbd> h.connect_command(["nbdkit", "-s", "memory", "1G"])
nbd> h.get_size()
1073741824
nbd> buf = b"hello, world"
nbd> h.pwrite(buf, 0)
nbd> exit()

دستور nbdsh یک پوستهٔ تعاملی مبتنی بر Python برای دسترسی به سرورهای دستگاه بلوکی شبکه (NBD) است.

برای مطالعهٔ مستندات مربوط به رابط برنامه‌نویسی (API) libnbd لطفاً پوسته را باز کرده و تایپ کنید:

help(nbd)

برای آشنایی با نحوه استفاده از libnbd در Python به libnbd-python(3) مراجعه کنید.

اسکریپت‌های نمونهٔ دیگری در مخزن کد منبع libnbd ذیل sh/examples یا در نشانی https://gitlab.com/nbdkit/libnbd/tree/master/sh/examples موجود است.

گزینهٔ -u به یک شناسه NBD URI متصل می‌شود. گزینهٔ -c به شما اجازه می‌دهد دستورهای تکی Python را از طریق خط فرمان اجرا کنید. ترکیب این دو گزینه به شما امکان می‌دهد اندازهٔ یک برون‌ریزی (export) NBD را بر حسب بایت چاپ کنید:

$ nbdsh -u nbd://localhost -c 'print(h.get_size())'
1073741824

با استفاده از -c - می‌توانید یک برنامهٔ کامل Python را به ورودی استاندارد nbdsh بفرستید:

nbdsh -c - <<'EOF'
from subprocess import *
h.connect_uri("nbd://localhost")
bootsect = h.pread(512, 0)
p = Popen("hexdump -C", shell=True, stdin=PIPE)
p.stdin.write(bootsect)
EOF

دستور nbddump(1) ابزار دیگری برای تولید خروجی hexdump از برون‌ریزی‌های NBD است.

بازنویسی ۲۰۴۸ بایت، با شروع از آفست ۱۰۲۴ (هگز 0x400)، با الگوی باینری تکرارشوندهٔ 01010101 10101010. (این عملیات مخرب است!)

$ nbdkit memory 4096
$ nbdsh -u nbd://localhost -c 'h.pwrite(b"\x55\xAA" * 1024, 0x400)'
$ nbddump nbd://localhost
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│
☆
0400: 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa │U·U·U·U·U·U·U·U·│
☆
0c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│
☆
0ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│
$ killall nbdkit

پارامتر -c شامل یک عبارت Python است که یک bytearray حاوی الگوی دو بایتی را ۱۰۲۴ بار تکرار می‌کند (با طول ۲۰۴۸ بایت)، و بایندینگ پایتونِ nbd_pwrite(3) را فراخوانی می‌کند. پارامتر دوم آفستی است که نوشتن از آن شروع می‌شود. برای کسب اطلاعات دربارهٔ nbdkit، به nbdkit(1) و nbdkit-memory-plugin(1) مراجعه کنید.

نمایش راهنمای مختصر خط فرمان و خروج.
درخواست استفاده از بافت فراگیر (meta context) با نام "base:allocation"، که رایج‌ترین بافت مورد استفاده همراه با nbd_block_status_64(3) است. این معادل فراخوانی "h.set_meta_context(nbd.CONTEXT_BASE_ALLOCATION)" در پوسته پیش از اتصال است، و حتی هنگام ترکیب با "--uri" نیز کار می‌کند (در حالی که تلاش برای انجام این کار با "-c" بسیار دیر خواهد بود).
به‌جای راه‌اندازی یک پوستهٔ تعاملی، یک دستور را اجرا می‌کند. این گزینه می‌تواند چندین بار مشخص شود تا چندین دستور اجرا شوند.
خواندن ورودی استاندارد و اجرای آن به عنوان یک دستور.
هندل ضمنی "h" را ایجاد نمی‌کند.
درخواست فعال‌سازی حالتِ گزینه (option mode)، که کنترلی دقیق بر مذاکرهٔ گزینه‌ها (option negotiation) پس از برقراری ارتباط اولیه با سرور اما پیش از استفادهٔ واقعی از export فراهم می‌کند. این معادل فراخوانی "h.set_opt_mode(True)" در پوسته پیش از اتصال است، و حتی هنگام ترکیب با "--uri" نیز کار می‌کند (در حالی که تلاش برای انجام این کار با "-c" بسیار دیر خواهد بود).
اتصال به URI مشخص‌شدهٔ NBD. این معادل دستور "h.connect_uri(URI)" در پوسته است.

توجه داشته باشید که اتصال پیش از پردازش هرگونه دستور "-c" برقرار می‌شود، که از استفاده از دستورهای پیکربندی مانند "h.add_meta_context("NAME")" از طریق خط فرمان هنگام ترکیب با این گزینه جلوگیری می‌کند. گزینه‌های "--opt-mode" و "--base-allocation" می‌توانند برای مدیریت ساده‌تر این وضعیت به کار روند.

فعال‌سازی پیام‌های پرگویی libnbd. این گزینه اثری یکسان با تنظیم متغیر محیطی "LIBNBD_DEBUG=1" دارد.
نمایش نام بسته و نسخه و خروج.

libnbd(3), libnbd-python(3), libnbd-security(3), nbdcopy(1), nbddiscard(1), nbddump(1), nbdfuse(1), nbdinfo(1), nbdublk(1), nbdzero(1), qemu-img(1), nbdkit(1).

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