Bắt đầu nhanh (5 phút)
iSCSI truyền tải các lệnh lưu trữ SCSI qua mạng TCP/IP tiêu chuẩn. Trong khi NFS và Samba chia sẻ tệp và thư mục ở cấp độ hệ thống tệp, iSCSI cung cấp trực tiếp các raw block chưa định dạng tới máy chủ của bạn. Phía client xử lý ổ đĩa từ xa như phần cứng cục bộ—gán cho nó một device node như /dev/sdb—và cho phép bạn định dạng bằng ext4, XFS hoặc ZFS.
Mỗi mô hình triển khai iSCSI đều bao gồm hai vai trò cốt lõi:
- Target: Máy chủ lưu trữ xuất (export) các raw disk, LVM logical volume hoặc tệp ảnh đĩa (file-backed disk image).
- Initiator: Máy client đăng nhập vào Target và mount block storage được chia sẻ.
Dưới đây là cấu hình triển khai tối giản hoạt động được trên Ubuntu 24.04 và Debian 12:
1. Máy chủ Target (IP: 192.168.10.50):
sudo apt update && sudo apt install -y targetcli-fb
sudo targetcli
# Chạy các lệnh sau bên trong targetcli:
> cd /backstores/fileio
> create name=disk01 file_or_dev=/var/storage_disk01.img size=10G
> cd /iscsi
> create iqn.2026-10.com.itfromzero:storage.target01
> cd iqn.2026-10.com.itfromzero:storage.target01/tpg1/luns
> create /backstores/fileio/disk01
> cd ../acls
> create iqn.2026-10.com.itfromzero:client01
> exit
2. Máy client Initiator (IP: 192.168.10.60):
sudo apt update && sudo apt install -y open-iscsi
echo "InitiatorName=iqn.2026-10.com.itfromzero:client01" | sudo tee /etc/iscsi/initiatorname.iscsi
sudo systemctl restart iscsid
sudo iscsiadm -m discovery -t sendtargets -p 192.168.10.50
sudo iscsiadm -m node -T iqn.2026-10.com.itfromzero:storage.target01 -p 192.168.10.50 --login
lsblk --scsi
Lệnh lsblk --scsi sẽ hiển thị ổ đĩa mới được gắn vào, sẵn sàng để định dạng và mount.
Tìm hiểu chuyên sâu
Tìm hiểu về iSCSI Qualified Names (IQN)
Mỗi node trên mạng iSCSI đều cần một định danh duy nhất trên toàn cầu gọi là IQN. Chuỗi định danh này tuân theo định dạng nghiêm ngặt do RFC 3720 quy định:
iqn.yyyy-mm.naming-authority:unique-name
iqn: Tiền tố bắt buộc chỉ định loại định danh.2026-10: Năm và tháng tổ chức của bạn đăng ký tên miền.com.itfromzero: Tên miền Internet đảo ngược của bạn.storage.target01: Chuỗi ký tự tùy chọn để đặt nhãn cho storage pool hoặc máy chủ cụ thể này.
Cấu hình máy chủ Target với LIO
Linux sử dụng hệ thống con nhân Linux-IO (LIO) để giả lập iSCSI target với hiệu năng cao. Bạn quản lý LIO thông qua shell tương tác targetcli. Đối với môi trường production, hãy sử dụng một LVM logical volume riêng biệt làm storage backstore thay vì tệp ảnh đĩa loopback nhằm loại bỏ chi phí đệm (buffering overhead) của hệ thống tệp.
Trong ví dụ này, chúng ta sẽ ánh xạ một volume 20 GB có sẵn (/dev/vg_storage/lv_iscsi) trên máy chủ lưu trữ:
sudo targetcli
Bên trong shell, tạo một backstore cấp block liên kết với LVM volume:
cd /backstores/block
create name=iscsi_block01 dev=/dev/vg_storage/lv_iscsi
Định nghĩa target endpoint và Target Portal Group (TPG) của nó:
cd /iscsi
create iqn.2026-10.com.itfromzero:target.dbdata
Gán storage backstore vào LUN 0 thuộc target group đó:
cd /iscsi/iqn.2026-10.com.itfromzero:target.dbdata/tpg1/luns
create /backstores/block/iscsi_block01
Thiết lập Access Control List (ACL). Chỉ initiator khớp chính xác với chuỗi này mới có thể thiết lập phiên kết nối:
cd /iscsi/iqn.2026-10.com.itfromzero:target.dbdata/tpg1/acls
create iqn.2026-10.com.itfromzero:initiator.dbnode1
exit
Mở cổng 3260 trên tường lửa để cho phép các kết nối đến từ initiator:
sudo ufw allow 3260/tcp
Cấu hình Initiator
Chuyển sang máy client (192.168.10.60). Cấu hình IQN của client sao cho khớp với mục ACL bạn đã tạo trên server:
echo "InitiatorName=iqn.2026-10.com.itfromzero:initiator.dbnode1" | sudo tee /etc/iscsi/initiatorname.iscsi
sudo systemctl restart iscsid open-iscsi
sudo systemctl enable iscsid open-iscsi
Gửi yêu cầu discovery probe để dò tìm các LUN khả dụng trên target:
sudo iscsiadm -m discovery -t sendtargets -p 192.168.10.50
Lệnh sẽ trả về IQN của target được phát hiện. Đăng nhập để gắn block storage:
sudo iscsiadm -m node -T iqn.2026-10.com.itfromzero:target.dbdata -p 192.168.10.50 --login
Kiểm tra xem kernel đã nhận diện ổ đĩa mới hay chưa:
lsblk --scsi
dmesg | grep -i scsi | tail -n 10
Bạn sẽ thấy một thiết bị SCSI mới xuất hiện, chẳng hạn như /dev/sdb.
Định dạng và Mount tự động khi khởi động (Persistent Mount)
Định dạng ổ đĩa với ext4. Thiết lập reserved blocks ở mức 1% giúp tiết kiệm dung lượng khả dụng trên các ổ đĩa lớn:
sudo mkfs.ext4 -m 1 /dev/sdb
sudo mkdir -p /mnt/iscsi_storage
sudo mount /dev/sdb /mnt/iscsi_storage
Tìm UUID của ổ đĩa để cấu hình mount an toàn khi khởi động:
sudo blkid -s UUID -o value /dev/sdb
Thêm mục cấu hình vào /etc/fstab. Tham số _netdev là bắt buộc; nó ngăn systemd mount phân vùng trước khi ngăn xếp mạng (network stack) sẵn sàng:
UUID=3a7b4c81-8e3d-49f2-b710-d8a1c93f0b22 /mnt/iscsi_storage ext4 defaults,_netdev 0 2
Kiểm tra lại cú pháp mount mà không cần khởi động lại máy:
sudo umount /mnt/iscsi_storage
sudo mount -a
df -h /mnt/iscsi_storage
Cấu hình nâng cao
Bắt buộc xác thực CHAP
Danh sách ACL của IQN giúp xác minh danh tính client, nhưng không thể ngăn chặn kẻ nghe lén trên mạng chèn các lệnh trái phép. Challenge-Handshake Authentication Protocol (CHAP) bổ sung cơ chế xác thực mật mã hai chiều trong quá trình thiết lập phiên kết nối.
Bật tính năng xác thực trên máy chủ Target:
sudo targetcli
cd /iscsi/iqn.2026-10.com.itfromzero:target.dbdata/tpg1
set attribute authentication=1
cd acls/iqn.2026-10.com.itfromzero:initiator.dbnode1
set auth userid=db_backup_user
set auth password=K8s_Vol_Storage_Pass99!
exit
Cấu hình thông tin xác thực tương ứng trên initiator trong /etc/iscsi/iscsid.conf:
node.session.auth.authmethod = CHAP
node.session.auth.username = db_backup_user
node.session.auth.password = K8s_Vol_Storage_Pass99!
Tải lại tiến trình nền (daemon) của initiator, đăng xuất và đăng nhập lại để kiểm tra thông tin xác thực:
sudo systemctl restart iscsid
sudo iscsiadm -m node -T iqn.2026-10.com.itfromzero:target.dbdata --logout
sudo iscsiadm -m node -T iqn.2026-10.com.itfromzero:target.dbdata --login
Mở rộng dung lượng Volume Online (không gián đoạn)
Một ưu điểm lớn của block storage là khả năng mở rộng dung lượng mà không làm gián đoạn hệ thống. Khi cần thêm không gian lưu trữ, bạn có thể tăng dung lượng của LVM slice bên dưới và hệ thống tệp của client mà không cần unmount ổ đĩa hay tạm dừng ứng dụng.
- Mở rộng volume thêm 10 GB trên máy chủ Target:
sudo lvextend -L +10G /dev/vg_storage/lv_iscsi - Quét lại (rescan) SCSI bus trên Initiator để nhận diện dung lượng mới:
sudo iscsiadm -m node -RKiểm tra bằng lệnh
lsblk /dev/sdb. Ổ đĩa sẽ hiển thị kích thước mới là 30 GB. - Mở rộng hệ thống tệp ext4 trực tiếp khi hệ thống vẫn đang hoạt động:
sudo resize2fs /dev/sdb
Kinh nghiệm thực tế
Lưu trữ qua mạng tiềm ẩn độ trễ và các tình huống lỗi mà bạn không bao giờ gặp trên các bus vật lý như SATA hay PCIe. Một sự cố mạng đơn lẻ cũng có thể khiến tầng ứng dụng bị treo I/O hoàn toàn.
Thực tiễn tốt nhất cho môi trường Production
- Không bao giờ bỏ qua
_netdevtrong/etc/fstab: Nếu thiếu tùy chọn này, systemd sẽ cố gắng mount phân vùng trước khi mạng được khởi động. Quá trình mount sẽ bị timeout sau 90 giây, đẩy máy chủ vào chế độ cứu hộ (emergency mode) khi khởi động lại. - Cô lập lưu trữ trên một VLAN riêng biệt: Lưu lượng iSCSI tiêu chuẩn không được mã hóa. Hãy định tuyến iSCSI qua một card mạng vật lý (NIC) riêng hoặc VLAN 802.1Q chuyên dụng (ví dụ: VLAN 100 trên dải mạng
10.10.100.0/24). Điều này giúp ngăn việc sao lưu dữ liệu dung lượng lớn làm nghẽn lưu lượng web production. - Bật Jumbo Frames (MTU 9000): Các gói tin Ethernet tiêu chuẩn 1500 byte tạo ra tỷ lệ ngắt CPU (CPU interrupt) cao khi xử lý I/O nặng. Việc bật MTU 9000 trên toàn bộ switch, target và initiator giúp giảm bớt overhead của packet header, nâng cao thông lượng đọc/ghi tuần tự trên kết nối 10 GbE từ ~850 MB/s lên hơn 1,1 GB/s.
- Ngăn ngừa hỏng dữ liệu khi có nhiều initiator: Các hệ thống tệp tiêu chuẩn (ext4, XFS) duy trì bộ nhớ đệm block nội bộ và mặc định quyền sở hữu độc quyền đối với ổ đĩa. Việc kết nối đồng thời hai máy vào cùng một LUN định dạng ext4 sẽ làm hỏng hệ thống tệp chỉ trong vài giây. Nếu nhiều node cần truy cập vào cùng một target, hãy sử dụng hệ thống tệp phân cụm (clustered filesystem) như OCFS2 hoặc GFS2.
- Luôn ngắt phiên kết nối một cách an toàn: Tuyệt đối không rút dây mạng hoặc khởi động lại máy chủ target khi initiator vẫn còn tệp tin đang mở. Luôn unmount volume trước khi đăng xuất khỏi phiên kết nối:
sudo umount /mnt/iscsi_storage sudo iscsiadm -m node -T iqn.2026-10.com.itfromzero:target.dbdata --logout

