Bối cảnh: Khi nào bạn thực sự cần iSCSI?
Chạy lab virtualization ở nhà hoặc trong môi trường team nhỏ, mình thường xuyên gặp bài toán: máy A có disk trống 500GB, máy B cần thêm storage để chạy VM. NFS giải quyết được file-level sharing, nhưng nếu cần block device thực sự — ví dụ để format ext4 trực tiếp, mount như một disk vật lý, hoặc dùng làm datastore cho VMware/Proxmox — iSCSI là lựa chọn đúng.
Mình dùng Fedora làm máy development chính đã 2 năm và khá hài lòng với tốc độ cập nhật package. Khi setup lab storage cho team, chọn Fedora Server làm iSCSI target là quyết định tự nhiên — targetcli có sẵn trong repo chính thức, tài liệu đầy đủ, và interactive shell rất trực quan.
iSCSI hoạt động như thế nào? Đơn giản: bạn expose một block device (file, LVM volume, hoặc disk thật) từ máy target qua TCP/IP. Máy initiator (client) kết nối vào và thấy nó như một disk SCSI thông thường — có thể partition, format, mount bình thường.
Ưu điểm so với NFS: latency thấp hơn với block workload, hỗ trợ exclusive locking cho cluster, và initiator không cần biết filesystem phía target đang dùng gì.
Cài đặt targetcli và chuẩn bị môi trường
Trên Fedora Server, gói chính là targetcli-fb (community fork của targetcli gốc Red Hat):
sudo dnf install -y targetcli-fb
Khởi động và enable service:
sudo systemctl enable --now target
Mở firewall cho iSCSI port (3260/TCP):
sudo firewall-cmd --permanent --add-service=iscsi-target
sudo firewall-cmd --reload
Kiểm tra service:
sudo systemctl status target
Nếu thấy Active: active (exited) — đó là bình thường. Service load configuration khi boot rồi exit. Chưa có config nào thì nó chưa làm gì cả.
Cấu hình iSCSI Target từng bước
Toàn bộ cấu hình thực hiện qua targetcli — một interactive shell kiểu filesystem navigation:
sudo targetcli
Bạn sẽ thấy dấu nhắc />. Dùng ls để xem cấu trúc, cd để di chuyển, help để xem lệnh.
Bước 1: Tạo Backstore
Backstore là nơi data thực sự lưu trữ. Có 3 loại phổ biến:
File-based — đơn giản nhất, dùng khi không có LVM:
# Tạo thư mục chứa file trước
sudo mkdir -p /var/lib/iscsi-storage
# Trong targetcli:
/backstores/fileio> create storage01 /var/lib/iscsi-storage/disk01.img 20G
Block-based — LVM volume, tốt nhất cho production:
# Tạo LVM volume
sudo lvcreate -L 50G -n iscsi-vol vg0
# Trong targetcli:
/backstores/block> create storage02 /dev/vg0/iscsi-vol
RAM disk — chỉ để benchmark, mất data khi reboot:
/backstores/ramdisk> create ramdisk01 1G
Với lab homeserver, mình hay dùng fileio vì không cần chuẩn bị LVM. Production thì block-based trên LVM sẽ có hiệu năng tốt hơn rõ rệt.
Bước 2: Tạo iSCSI Target
iSCSI target được identify bằng IQN (iSCSI Qualified Name) có format: iqn.YYYY-MM.tld.domain:identifier
/iscsi> create iqn.2026-06.com.itfromzero:storage01
Nếu không chỉ định IQN, targetcli tự generate từ hostname. Nhưng nên đặt tên rõ ràng để dễ quản lý sau này.
Bước 3: Tạo LUN
Di chuyển vào TPG (Target Portal Group) của target vừa tạo:
/iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1/luns> create /backstores/fileio/storage01
LUN 0 sẽ được tạo tự động và map vào backstore đã chỉ định.
Bước 4: Cấu hình Portal
Portal là địa chỉ IP và port mà target lắng nghe:
/iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1/portals> create 192.168.1.100 3260
Thay 192.168.1.100 bằng IP thực của máy Fedora Server. Muốn listen trên tất cả interface thì dùng 0.0.0.0.
Bước 5: Cấu hình ACL
Đây là bước quan trọng nhất về bảo mật. Mặc định, TPG ở chế độ generate_node_acls=1 (cho phép tất cả initiator). Với môi trường production, nên tắt đi và whitelist từng initiator:
/iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1> set attribute generate_node_acls=0
# Thêm ACL cho initiator cụ thể
/iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1/acls> create iqn.2026-06.com.itfromzero:client01
Muốn thêm CHAP authentication (username/password):
/iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1/acls/iqn.2026-06.com.itfromzero:client01> set auth userid=iscsiuser password=SecretPass123
Lưu cấu hình
/> saveconfig
/> exit
Config được lưu vào /etc/target/saveconfig.json. Service target load file này khi boot.
Kết nối từ phía Initiator (Client Linux)
Trên máy client — Fedora, Ubuntu, hoặc bất kỳ Linux nào:
# Fedora/RHEL
sudo dnf install iscsi-initiator-utils
# Ubuntu/Debian
sudo apt install open-iscsi
Xem IQN của máy client (cần cung cấp cho target để tạo ACL):
cat /etc/iscsi/initiatorname.iscsi
Discover target:
sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100
Kết quả mong đợi:
192.168.1.100:3260,1 iqn.2026-06.com.itfromzero:storage01
Login vào target:
sudo iscsiadm -m node -T iqn.2026-06.com.itfromzero:storage01 -p 192.168.1.100 --login
Kiểm tra disk mới xuất hiện:
lsblk
# hoặc xem dmesg
dmesg | tail -20
Bạn sẽ thấy thiết bị /dev/sdb (hoặc /dev/sdc) xuất hiện. Từ đây, format và mount như disk thông thường:
sudo mkfs.ext4 /dev/sdb
sudo mount /dev/sdb /mnt/iscsi-storage
Kiểm tra trạng thái và Monitoring
Xem cấu trúc target
sudo targetcli ls
Lệnh này hiển thị toàn bộ cấu trúc: backstores, targets, LUNs, portals, ACLs — rất hữu ích khi debug.
Xem sessions đang kết nối
sudo targetcli /iscsi/iqn.2026-06.com.itfromzero:storage01/tpg1 sessions
Monitor I/O với iostat
# Cài sysstat nếu chưa có
sudo dnf install sysstat
# Monitor realtime mỗi 1 giây
iostat -x 1
Với fileio backstore, bạn thấy I/O trên disk chứa file .img. Với block backstore, thấy trực tiếp trên LVM device.
Benchmark nhanh từ initiator
sudo fio --filename=/dev/sdb --rw=read --bs=128k --iodepth=32 \
--runtime=30 --numjobs=4 --time_based \
--group_reporting --name=seq-read-test
Trong lab của mình (Gigabit LAN, fileio backstore trên SSD), sequential read đạt khoảng 900–950 MB/s — gần saturate đường mạng 1Gbps. Cần throughput cao hơn thì xem xét 10GbE hoặc bật jumbo frames.
Một vài lưu ý thực tế
- SELinux context: Nếu bạn dùng SELinux enforcing (mặc định trên Fedora), cần set đúng context cho thư mục backstore:
sudo semanage fcontext -a -t tgtd_var_lib_t "/var/lib/iscsi-storage(/.*)?" sudo restorecon -Rv /var/lib/iscsi-storageBỏ qua bước này thì target service có thể không đọc được file backstore — lỗi âm thầm, khó debug.
- Persistent mount trên initiator: Thêm vào
/etc/fstabvới option_netdevđể đảm bảo mount sau khi network up:/dev/sdb /mnt/iscsi-storage ext4 _netdev,auto 0 0 - iSCSI vs NVMe-oF: Nếu bạn đang chạy 10GbE+ và cần latency tối thiểu, NVMe-oF là bước upgrade tự nhiên. Nhưng với lab 1GbE, iSCSI qua targetcli là đủ dùng và setup đơn giản hơn nhiều.
- Logout khi không dùng: Trên initiator, logout sạch trước khi reboot target để tránh hung mount:
sudo iscsiadm -m node -T iqn.2026-06.com.itfromzero:storage01 -p 192.168.1.100 --logout
targetcli có interactive shell khá thân thiện — chỉ cần ls để xem cấu trúc hiện tại, cd để navigate, và help khi quên lệnh. So với cấu hình iSCSI thủ công qua file config trực tiếp, targetcli tiết kiệm thời gian đáng kể và giảm thiểu lỗi cú pháp.

