NVMETCLI(8)   NVMETCLI(8)

nvmetcli - پیکربندی NVMe-over-Fabrics Target.

nvmetcli
nvmetcli clear
nvmetcli restore [filename.json]

nvmetcli برنامه‌ای برای مشاهده، ویرایش، ذخیره و راه‌اندازی NVMe Target در کرنل لینوکس است که برای پیکربندی شبکه NVMe-over-Fabrics به کار می‌رود. این ابزار به مدیر سیستم اجازه می‌دهد یک منبع ذخیره‌سازی (مانند دستگاه‌های NVMe، فایل‌ها و حجم‌ها) را به عنوان دستگاه بلوکی محلی خروجی دهد و آن‌ها را بر اساس مشخصات NVMe-over-Fabrics از http://www.nvmexpress.org در دسترس سیستم‌های راه دور قرار دهد.

nvmetcli با دسترسی ریشه (root) اجرا می‌شود و دارای دو حالت است:

1.یک شل تعاملی پیکربندی
2.حالت خط فرمان که از یک آرگومان استفاده می‌کند

اصطلاح NQN که در سراسر این صفحه راهنما استفاده شده، قالب NVMe Qualified Name است که یک نقطه پایانی NVMe (دستگاه، زیرسیستم و غیره) باید از آن پیروی کند تا یکتا بودن نام تحت استاندارد NVMe تضمین شود. هر نامی را می‌توان در راه‌اندازی سیستم شبکه استفاده کرد، اما اگر از قالب NQN پیروی نکند، ممکن است در یک شبکه NVMe-over-Fabrics یکتا نباشد.

توجه داشته باشید که برخی از فیلدهای تنظیم‌شده برای یک درگاه NVMe Target در حالت تعاملی، در بخش "Discovery Log Page" از مشخصات NVMe-over-Fabrics تعریف شده‌اند. هر NVMe Target دارای یک سازوکار کنترل‌کننده کشف (discovery controller) است که یک NVMe Host می‌تواند از آن برای تعیین زیرسیستم‌های NVM قابل دسترسی استفاده کند. nvmetcli می‌تواند برای افزودن یک رکورد جدید به کنترل‌کننده کشف به ازای هر مدخل زیرسیستم جدید و مدخل درگاهی که مدخل زیرسیستم تازه ایجادشده به آن متصل می‌شود، استفاده شود (بخش‌های گزینه‌ها (OPTIONS) و مثال‌ها (EXAMPLES) را ببینید). هر NVMe Host تنها مدخل‌های کشف تعریف‌شده در /subsystems/[NQN NAME]/allowed_hosts و درگاه IP متصل به NVMe Target را مشاهده می‌کند. یک NVMe Host می‌تواند این لاگ‌های کشف را از طریق ابزار nvme-cli (https://github.com/linux-nvme/nvme-cli) دریافت کند.

شل تعاملی پیکربندی (Interactive Configuration Shell)

برای شروع شل تعاملی پیکربندی، nvmetcli را در خط فرمان وارد کنید. nvmetcli با زیرسیستم configfs مربوط به NVMe Target کرنل لینوکس از دایرکتوری‌های پایه /port، /subsystem و /host تعامل برقرار می‌کند. تغییرات پیکربندی واردشده توسط مدیر سیستم بلافاصله روی پیکربندی هدف کرنل اعمال می‌شوند. دستورات زیر در حالت شل تعاملی پیکربندی قابل استفاده هستند:

cd امکان پیمایش در درخت را فراهم می‌کند.
ls محتویات گره فعلی درخت را فهرست می‌کند.
create [NQN name]/[#] ایجاد یک شیء جدید با استفاده از نام یا شماره مشخص‌شده. اگر [NQN name]/[#] مشخص نشود، یک مدخل تصادفی استفاده خواهد شد.
delete [NQN name]/[#] حذف یک شیء با نام یا شماره مشخص‌شده.
set attr allow_any_host=[0/1] در مسیر /subsystems/[NQN name] استفاده می‌شود تا مشخص کند آیا هر NVMe Host می‌تواند به زیرسیستم متصل شود یا خیر.
set device path=[device path] در مسیر /subsystems/[NQN name]/namespaces برای تنظیم دستگاه (ذخیره‌سازی) مورد استفاده به کار می‌رود.
set device nguid=[string] در مسیر /subsystems/[NQN name]/namespaces برای تنظیم شناسه یکتای دستگاه در فضای نام تعریف‌شده استفاده می‌شود.
enable/disable در مسیر /subsystems/[NQN name]/namespaces برای فعال و غیرفعال کردن فضای نام استفاده می‌شود.
set addr [discovery log page field]=[string] در مسیر /ports/[#] برای ایجاد درگاهی که دسترسی به آن مجاز است استفاده می‌شود. برای اطلاعات بیشتر بخش مثال‌ها (EXAMPLES) را ببینید.
saveconfig [filename.json] پیکربندی NVMe Target را با فرمت .json ذخیره می‌کند. بدون مشخص کردن نام فایل، در /etc/nvmet/config.json ذخیره خواهد شد. این فایل با فرمت JSON است و می‌توان آن را مستقیماً با ویرایشگر فایل دلخواه ویرایش کرد.
exit از حالت شل تعاملی پیکربندی خارج می‌شود.

حالت خط فرمان (Command Line Mode)

وارد کردن nvmetcli [cmd] در خط فرمان، دستور را اجرا کرده و وارد شل تعاملی پیکربندی نمی‌شود.

restore [filename.json] یک پیکربندی ذخیره‌شده NVMe Target را بارگذاری می‌کند. بدون مشخص کردن نام فایل، از /etc/nvmet/config.json استفاده خواهد شد.
clear پیکربندی فعلی NVMe Target را پاک می‌کند.
ls پیکربندی فعلی NVMe Target را نمایش می‌دهد (dump می‌کند).

اطمینان حاصل کنید که nvmetcli به عنوان ریشه (root) اجرا می‌شود، ماژول nvmet بارگذاری شده است، دستگاه‌های شما و تمامی ماژول‌های وابسته بارگذاری شده‌اند، و configfs با دستور زیر روی /sys/kernel/config مانت شده است:

mount -t configfs none /sys/kernel/config

بخش زیر یک نمونه پیکربندی را شرح می‌دهد.

•برای شروع کار با حالت تعاملی و اعلان دستور nvmetcli، تایپ کنید (در کاربر ریشه):
# ./nvmetcli
...>
•ایجاد یک زیرسیستم. اگر نامی مشخص نکنید یک NQN تولید خواهد شد که احتمالاً بهترین انتخاب است. ما در اینجا این کار را انجام نمی‌دهیم زیرا نام تصادفی خواهد بود:
> cd /subsystems
...> create testnqn
•افزودن دسترسی برای یک NVMe Host مشخص بر اساس NQN آن:
...> cd /hosts
...> create hostnqn
...> cd /subsystems/testnqn
...> set attr allow_any_host=0
...> cd /subsystems/testnqn/allowed_hosts/
...> create hostnqn
•حذف دسترسی یک زیرسیستم با حذف Host NQN:
...> cd /subsystems/testnqn/allowed_hosts/
...> delete hostnqn
•در روش دیگر، این دستور به هر Host اجازه می‌دهد به زیرسیستم متصل شود. فقط در محیط‌های به شدت کنترل‌شده از این مورد استفاده کنید:
...> cd /subsystems/testnqn/
...> set attr allow_any_host=1
•ایجاد یک فضای نام جدید. اگر شناسه فضای نام را مشخص نکنید، از اولین شناسه استفاده‌نشده استفاده خواهد شد:
...> cd /subsystems/testnqn/namespaces
...> create 1
...> cd 1
...> set device path=/dev/nvme0n1
...> enable

توجه داشته باشید که در پیکربندی بالا نیازی به تنظیم ویژگی device_nguid برای کارکرد صحیح NVMe Target نیست (اما برای تطابق دقیق یک فضای نام با دستگاه مربوطه در عملیات clear و restore، توصیه می‌شود پارامتر device_nguid تنظیم شود).

•ایجاد یک درگاه loopback که بتوان با ماژول nvme-loop روی همان ماشین فیزیکی از آن استفاده کرد...
...> cd /ports/
...> create 1
...> cd 1/
...> set addr trtype=loop
...> cd subsystems/
...> create testnqn
•یا ایجاد یک درگاه RDMA (شامل IB، RoCE، iWarp) با استفاده از آدرس‌دهی IPv4. مقدار 4420 درگاه پیش‌فرض اختصاص‌داده‌شده توسط IANA برای NVMe over Fabrics با استفاده از RDMA است:
...> cd /ports/
...> create 2
...> cd 2/
...> set addr trtype=rdma
...> set addr adrfam=ipv4
...> set addr traddr=192.168.6.68
...> set addr trsvcid=4420
...> cd subsystems/
...> create testnqn
•یا ایجاد یک درگاه FC. مقدار traddr همان WWNN/WWPN درگاه FC است.
...> cd /ports/
...> create 3
...> cd 3/
...> set addr trtype=fc
...> set addr adrfam=fc
...> set addr traddr=nn-0x1000000044001123:pn-0x2000000055001123
...> set addr trsvcid=none
...> cd subsystems/
...> create testnqn
•ذخیره پیکربندی NVMe Target:
./nvmetcli
...> saveconfig test.json
•بارگذاری پیکربندی NVMe Target:
./nvmetcli restore test.json
•پاک کردن پیکربندی فعلی NVMe Target:
./nvmetcli clear

nvmetcli این قابلیت را دارد که با استفاده از ابزار لینوکسی systemctl از طریق یک فایل .service، پیکربندی NVMe Target را هنگام بوت و خاموش شدن راه‌اندازی و متوقف کند. بسته nvmetcli همراه با nvmet.service ارائه می‌شود که پس از نصب می‌تواند به طور خودکار پیکربندی پیش‌فرض و ذخیره‌شده NVMe Target را از /etc/nvmet/config.json بازیابی کند. فایل nvmet.service می‌تواند در دایرکتوری‌هایی مانند /lib/systemd/system نصب شود.

برای فعال‌سازی صریح سرویس، وارد کنید:

systemctl enable nvmet

برای غیرفعال‌سازی صریح سرویس، وارد کنید:

systemctl disable nvmet

همچنین systemctl(1) را ببینید.

این صفحه راهنما توسط Jay Freyensee[1] نوشته شده است. nvmetcli در اصل توسط Christoph Hellwig[2] نوشته شده بود.

لطفاً وصله‌ها و گزارش‌های اشکال را برای بررسی و پذیرش به linux-nvme@lists.infradead.org[3] ارسال کنید.

ابزار nvmetcli تحت Apache License, Version 2.0 منتشر شده است. نرم‌افزار ارائه‌شده تحت این مجوز بر مبنای «همان‌گونه که هست» (AS IS) و بدون هرگونه ضمانت صریح یا ضمنی توزیع می‌شود.

1.
Jay Freyensee
mailto:james.p.freyensee@intel.com
2.
Christoph Hellwig
mailto:hch@infradead.org
3.
linux-nvme@lists.infradead.org
mailto:linux-nvme@lists.infradead.org
08/19/2026