پرش به محتوا

ذخیره‌سازی iSCSI: target با targetcli و اتصال initiator

یک LV را به‌صورت دیسک شبکه‌ای iSCSI با ACL و CHAP منتشر کنید و از سرور دیگر آن را مثل یک دیسک محلی وصل و دائمی mount کنید.

Ubuntu 24.04 LTSسطح: متوسطبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۷ آبان ۱۴۰۵

iSCSI یک دیسک بلوکی را از طریق شبکه می‌دهد. سرور گیرنده آن را مثل یک دیسک معمولی (/dev/sdX) می‌بیند. در این آموزش stor01 (192.168.10.40) دیسک را منتشر می‌کند و app01 از آن استفاده می‌کند. ترافیک iSCSI را روی شبکه یا VLAN جداگانه بگذارید.

۱. target: نصب و فضای ذخیره

روی stor01:

bash
sudo apt install -y targetcli-fb
sudo lvcreate -n app01-data -L 100G vg0

۲. تعریف target

نام‌های iSCSI قالب IQN دارند: iqn.<سال-ماه>.<دامنه‌ی معکوس>:<نام>.

bash
sudo targetcli /backstores/block create name=app01-data dev=/dev/vg0/app01-data
sudo targetcli /iscsi create iqn.2026-11.ir.sahor:stor01.app01
sudo targetcli /iscsi/iqn.2026-11.ir.sahor:stor01.app01/tpg1/luns create /backstores/block/app01-data

فقط initiator مشخص اجازه‌ی اتصال داشته باشد، آن هم با CHAP:

bash
T=/iscsi/iqn.2026-11.ir.sahor:stor01.app01/tpg1
sudo targetcli $T/acls create iqn.2026-11.ir.sahor:app01
sudo targetcli $T/acls/iqn.2026-11.ir.sahor:app01 set auth userid=app01 password=Chap-Secret-16ch
sudo targetcli saveconfig
sudo targetcli ls
sudo systemctl enable rtslib-fb-targetctl
sudo ufw allow from 192.168.10.0/24 to any port 3260 proto tcp

رمز CHAP باید ۱۲ تا ۱۶ کاراکتر باشد. در بیشتر نسخه‌ها، portal روی 0.0.0.0:3260 خودکار ساخته می‌شود.

۳. initiator: اتصال

روی app01:

bash
sudo apt install -y open-iscsi
echo 'InitiatorName=iqn.2026-11.ir.sahor:app01' | sudo tee /etc/iscsi/initiatorname.iscsi
sudo systemctl restart iscsid

N=iqn.2026-11.ir.sahor:stor01.app01
sudo iscsiadm -m discovery -t sendtargets -p 192.168.10.40
sudo iscsiadm -m node -T $N -o update -n node.session.auth.authmethod -v CHAP
sudo iscsiadm -m node -T $N -o update -n node.session.auth.username -v app01
sudo iscsiadm -m node -T $N -o update -n node.session.auth.password -v Chap-Secret-16ch
sudo iscsiadm -m node -T $N -o update -n node.startup -v automatic
sudo iscsiadm -m node -T $N --login
lsblk

۴. فایل‌سیستم و mount دائمی

فرض می‌کنیم دیسک جدید /dev/sdb است. با lsblk و ls -l /dev/disk/by-path | grep iscsi مطمئن شوید:

bash
sudo mkfs.ext4 -L appdata /dev/sdb
sudo mkdir -p /srv/appdata
echo 'LABEL=appdata /srv/appdata ext4 _netdev,nofail 0 2' | sudo tee -a /etc/fstab
sudo systemctl daemon-reload && sudo mount -a && df -h /srv/appdata

گزینه‌ی _netdev mount را تا آماده شدن شبکه عقب می‌اندازد. nofail هم باعث می‌شود اگر stor01 در دسترس نبود، بوت سرور متوقف نشود.

هشدار

یک LUN با فایل‌سیستم معمولی (ext4 یا XFS) را هرگز هم‌زمان به دو سرور وصل نکنید. فایل‌سیستم خراب می‌شود. دسترسی هم‌زمان چند سرور فقط با فایل‌سیستم خوشه‌ای ممکن است، مثل VMFS در ESXi یا OCFS2 و GFS2.