QuanTriMang.com - Trong bài viết sau, Quản Trị Mạng sẽ giới thiệu với các bạn thiết lập hệ thống bao gồm iSCSI target và iSCSI initiator (client), cả 2 đều hoạt động trên nền tảng Ubuntu 10.04. Giao thức theo chuẩn iSCSI là 1 phương pháp lưu trữ dữ liệu trên hệ thống mạng - storage area network (SAN), cho phép các iSCSI khởi tạo trực tiếp sử dụng các thiết bị lưu trữ trên iSCSI mục tiêu (có thể bằng cách remote) sử dụng cable nối mạng bình thường.
Lưu ý sơ bộ
Trong bài thử nghiệm này, chúng ta sẽ dùng 2 hệ thống Ubuntu 10.04 server như sau:
- server1.example.com (Initiator): IP address 192.168.0.100
- server2.example.com (Target): IP address 192.168.0.101
Bởi vì chúng ta sẽ thực hiện tất cả các thao tác trên quyền root, có thể sẽ áp dụng các câu lệnh với chuỗi sudo đằng trước hoặc trở thành tài khoản root ngay từ bây giờ:
sudo su
Thiết lập hệ thống server mục tiêu (server2)
Đối với server2: trước tiên, gõ lệnh sau:
aptitude install iscsitarget
Sau đó mở file /etc/default/iscsitarget...
vi /etc/default/iscsitarget
và thiết lập giá trị ISCSITARGET_ENABLE thành true:
ISCSITARGET_ENABLE=true
Trên thực tế, chúng ta có thể không sử dụng các volume logical, file image, ổ cứng … (/dev/sdb), các phân vùng ổ cứng (/dev/sdb1), các thiết bị RAID (/dev/md0) để lưu trữ. Và trong bài thử nghiệm này, chúng ta sẽ tạo ra 1 volume logical với dung lượng 20GB, và đặt tên là storage_lun1 trong nhóm vg0:
lvcreate -L20G -n storage_lun1 vg0
Nếu bạn muốn sử dụng file image, có thể tạo ra file định dạng đó theo cách sau:
mkdir /storage
dd if=/dev/zero of=/storage/lun1.img bs=1024k count=20000
Quá trình này sẽ tạo ra file /storage/lun1.img với dung lượng 20GB.
Tiếp theo, chỉnh lại file /etc/ietd.conf...:
vi /etc/ietd.conf
và chú thích bên ngoài tất cả mọi thứ trong file đó. Ở phía cuối, chúng ta sẽ thêm đoạn mã sau:
[...]
Target iqn.2001-04.com.example:storage.lun1
IncomingUser someuser secret
OutgoingUser
Lun 0 Path=/dev/vg0/storage_lun1,Type=fileio
Alias LUN1
#MaxConnections 6
Tên của đích đến yêu cầu phải theo chuẩn thống nhất, tại đây chúng tuân theo chuẩn iSCSI - iSCSI Qualified Name có dạng như sau iqn.yyyy-mm.<reversed domain name>[:identifier], trong đó yyyy-mm là ngày tháng giá trị domain còn tồn tại, có thể lựa chọn tự do. Dòng IncomingUser chứa thông tin tài khoản bao gồm username và password, do đó chỉ những người khởi tạo - initiator (client) được cung cấp username và password này mới có thể đăng nhập và sử dụng các thiết bị lưu trữ. Nếu bạn không cần quá trình xác thực và nhận dạng, không nên khởi tạo giá trị username và password trong dòng IncomingUser. Tại dòng Lun, chúng ta phải khai báo đường dẫn đầy đủ tới thiết bị lưu trữ (ví dụ như /dev/vg0/storage_lun1, /storage/lun1.img, /dev/sdb …)
Việc tiếp theo cần làm là thông báo tới các target rằng chúng ta sẽ cho phép tất cả các kết nối truy cập tới thiết bị iqn.2001-04.com.example:storage.lun1 từ địa chỉ IP 192.168.0.100 (server1.example.com):
vi /etc/initiators.allow
[...]
iqn.2001-04.com.example:storage.lun1 192.168.0.100
#ALL ALL
Sau đó khởi động các target:
/etc/init.d/iscsitarget start
Thiết lập hệ thống Initiator (server1)
Trên hệ thống server1, chúng ta sẽ cài đặt các thành phần sau:
aptitude install open-iscsi
Sau đó, mở file /etc/iscsi/iscsid.conf... :
vi /etc/iscsi/iscsid.conf
và thiết lập giá trị node.startup thành automatic:
[...]
node.startup = automatic
[…]
Khởi động lại các thành phần initiator:
/etc/init.d/open-iscsi restart
Bây giờ, chúng ta sẽ kết nối tới mục tiêu – target (server2) để kiểm tra các thiết bị lưu trữ:
iscsiadm -m discovery -t st -p 192.168.0.101
root@server1:~# iscsiadm -m discovery -t st -p 192.168.0.101
192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1
root@server1:~#
iscsiadm -m node
root@server1:~# iscsiadm -m node
192.168.0.101:3260,1 iqn.2001-04.com.example:storage.lun1
root@server1:~#
Các thiết lập kỹ thuật cho thiết bị lưu trữ iqn.2001-04.com.example:storage.lun1 on 192.168.0.101:3260,1 được lưu trữ trong file /etc/iscsi/nodes/iqn.2001-04.com.example:storage.lun1/192.168.0.101,3260,1/default. Chúng ta cần khởi tạo giá trị username và password cho target trong file đó luôn, bằng cách sử dụng cú pháp lệnh iscsiadm:
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.authmethod --value=CHAP
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.username --value=someuser
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --op=update --name node.session.auth.password --value=secret
Sau đó, chúng ta có thể đăng nhập bằng lệnh sau:
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --login
root@server1:~# iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --login
Logging in to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.0.101,3260]
Login to [iface: default, target: iqn.2001-04.com.example:storage.lun1, portal: 192.168.0.101,3260]: successful
root@server1:~#
Hoặc khởi động lại initiator:
/etc/init.d/open-iscsi restart
Nếu muốn đăng xuất ra khỏi hệ thống:
iscsiadm -m node --targetname "iqn.2001-04.com.example:storage.lun1" --portal "192.168.0.101:3260" --logout
Trong phần kết quả trả về của câu lệnh:
fdisk -l
bạn sẽ thấy 1 ổ cứng mới (trong ví dụ này là /dev/sdb) – đó là thiết bị lưu trữ iSCSI của chúng ta:
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016be9
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 248832 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 32 3917 31205377 5 Extended
/dev/sda5 32 3917 31205376 8e Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
root@server1:~#
Để sử dụng thiết bị này, trước tiên phải định dạng nó:
fdisk /dev/sdb
server1:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x882944df.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
The number of cylinders for this disk is set to 20480.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): <-- gõ m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): <-- gõ n
Command action
e extended
p primary partition (1-4)
<-- gõ p
Partition number (1-4): <-- 1
First cylinder (1-20480, default 1): <-- gõ ENTER
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-20480, default 20480): <-- gõ ENTER
Using default value 20480
Command (m for help): <-- gõ t
Selected partition 1
Hex code (type L to list codes): <-- gõ L
0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): <-- gõ 83
Command (m for help): <-- gõ w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
server1:~#
Sau đó, kết quả của câu lệnh:
fdisk -l
sẽ trông như sau:
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00016be9
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 248832 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 32 3917 31205377 5 Extended
/dev/sda5 32 3917 31205376 8e Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x725b9dff
Device Boot Start End Blocks Id System
/dev/sdb1 1 20480 20971504 83 Linux
root@server1:~#
Tiếp theo, chúng ta cần tại file hệ thống trên phân vùng /dev/sdb1... :
mkfs.ext4 /dev/sdb1
Và ghép tới các thành phần cần thiết khác để thử nghiệm:
mount /dev/sdb1 /mnt
Và bạn sẽ thấy thiết bị mới xuất hiện trong danh sách trả về của câu lệnh sau:
mount
root@server1:~# mount
/dev/mapper/server1-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
/dev/sda1 on /boot type ext2 (rw)
/dev/sdb1 on /mnt type ext4 (rw)
root@server1:~#
và:
df -h
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
18G 838M 16G 5% /
none 243M 180K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 36K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
none 18G 838M 16G 5% /var/lib/ureadahead/debugfs
/dev/sda1 228M 17M 199M 8% /boot
/dev/sdb1 20G 172M 19G 1% /mnt
root@server1:~#
Nếu không muốn ghép thiết bị nữa thì dùng lệnh sau:
umount /mnt
Để thiết lập tính năng tự động kết nối khi hệ thống khởi động, ví dụ trong thư mục /storage thì chúng ta cần tạo thư mục đó:
mkdir /storage
và thêm dòng lệnh sau vào file /etc/fstab:
vi /etc/fstab
[...]
/dev/sdb1 /storage ext4 defaults,auto,_netdev 0 0
Và, khởi động lại hệ thống:
mount
root@server1:~# mount
/dev/mapper/server1-root on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
/dev/sda1 on /boot type ext2 (rw)
/dev/sdb1 on /storage type ext4 (rw,_netdev)
root@server1:~#
df -h
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
18G 839M 16G 5% /
none 243M 180K 242M 1% /dev
none 247M 0 247M 0% /dev/shm
none 247M 36K 247M 1% /var/run
none 247M 0 247M 0% /var/lock
none 247M 0 247M 0% /lib/init/rw
none 18G 839M 16G 5% /var/lib/ureadahead/debugfs
/dev/sda1 228M 17M 199M 8% /boot
/dev/sdb1 20G 172M 19G 1% /storage
root@server1:~#
Trên đây là 1 số bước cơ bản để thiết lập và sử dụng hệ thống bao gồm iSCSI target và iSCSI initiator (client), cả 2 đều hoạt động trên nền tảng Ubuntu 10.04. Chúc các bạn thành công!