Honey
สรุปว่าเครื่องเซิร์ฟเวอร์ใหม่ที่เพิ่งลง Ubuntu 64bit ไป
(ลงเอยด้วย Ubuntu 5.1-amd64)
มีชื่อว่า Honey :)
เพราะตอนติดตั้งกำลังนั่งกิน "Cashews Honey Roasted"
เครื่องเซิร์ฟเวอร์ตัวก่อนหน้า (ที่เพิ่งเจ๊งไป) ตอนสั่งเลือกเป็น Hardware SATA RAID ใช้แล้วรู้สึกว่ามันช้า
ยังดีที่ Linux Kernel มี Driver ให้
แต่โปรแกรมเครื่องมือสำหรับตรวจสอบสถานะของ RAID
จาก Linux เขาแจกมาให้เป็น Binary เฉพาะสำหรับ Redhat
เอามาลองเล่นดูบน Debian (KNOPPIX) แล้วรันไม่ได้ ยังไม่ได้ไปไล่ดูว่าเป็นเพราะอะไร
เครื่องนี้เลยเปลี่ยนเป็น SCSI Disk 300GB x 4 ตัว ธรรมด้าธรรมดา (JBOD - Just a Bunch Of Disks)
แล้วใช้ Software RAID ของ Linux จัดการเองละกัน ง่ายดี ไม่น่ามีปัญหาเรื่อง Distro ฯลฯ อีก
MDADM
ก่อนหน้านี้บน Linux เวลาทำ Software RAID ก็จะเขียนไฟล์
/etc/raidtab แล้วใช้โปรแกรม ฯลฯ ใน raidtools
(mkraid, raidstart) จัดการ
ไปพบว่าเดี๋ยวนี้มีโปรแกรมใหม่ ชื่อ
mdadm
ซึ่งไม่ง้อไฟล์ /etc/raidtab แล้ว และท่าทางมีอะไรให้เล่นมากขึ้นเยอะ
ก็เลยตัดสินใจลองของใหม่ก็แล้วกัน
สมมติว่าสร้าง Partition บน Disk แต่ละตัวเรียบร้อยแล้ว (ความจริงไม่น่าจำเป็น
ใช้ /dev/sda ทั้งก้อนไปเลย)
และจะเอา /dev/sdb1,
/dev/sdc1,
/dev/sdd1 3 อันมาทำ RAID5
ต้องสั่ง
# mdadm -Cv /dev/md0 -l5 -n3 /dev/sd{b,c,d}1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: size set to 292961216K
mdadm: array /dev/md0 started.
มันจัดการสร้าง RAID5 เป็น
/dev/md0
และ START ให้เรียบร้อยเลย ง่ายดี
ในคู่มือของ mdadm เขาบอกว่า เวลาสร้าง RAID5 โดยกำหนดว่ามีดิสก์ 3 ตัว
mdadm จะแกล้งสร้างโดยใช้ดิสก์แค่ 2 ตัวก่อน (แกล้งบอกว่าตัวที่ 3 เจ๊ง)
และให้อีกตัวเป็น Spare จากนั้นจึงทำการ Recover เอา Spare มาทำเป็นตัวที่ 3
เขาบอกว่าแบบนี้จะเร็วกว่า ซึ่งก็เห็นได้จาก
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Thu Dec 15 12:07:44 2005
Raid Level : raid5
Array Size : 585922432 (558.78 GiB 599.98 GB)
Device Size : 292961216 (279.39 GiB 299.99 GB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Dec 15 12:30:10 2005
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 64K
Rebuild Status : 31% complete
UUID : 57fdf57f:22aec90f:f38f06cf:4e33028d
Events : 0.17
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/.static/dev/sdb1
1 8 33 1 active sync /dev/.static/dev/sdc1
2 0 0 - removed
3 8 49 2 spare rebuilding /dev/.static/dev/sdd1r
และ
# cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
585922432 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 0.9% (2670336/292961216) finish=67.1min speed=72010K/sec
จะเห็นว่า
sdd1 มีตัวเลข
[3]
เพราะโดนทำให้เป็น SPARE ไม่ต่อเนื่องกับสองตัวแรก
sdb1[0],
sdc1[1]
เมื่อเวลาผ่านไปชั่วโมงกว่าๆ ลองเปิดดูอีกที
# cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sdc1[1] sdb1[0]
585922432 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
unused devices:
พอทำการซ่อมเสร็จ
sdd1 กลายเป็นเลข
[2]
และรายละเอียดของ RAID จะเป็น
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Thu Dec 15 12:07:44 2005
Raid Level : raid5
Array Size : 585922432 (558.78 GiB 599.98 GB)
Device Size : 292961216 (279.39 GiB 299.99 GB)
Raid Devices : 3
Total Devices : 3
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Thu Dec 15 13:44:05 2005
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
UUID : 57fdf57f:22aec90f:f38f06cf:4e33028d
Events : 0.1654
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/.static/dev/sdb1
1 8 33 1 active sync /dev/.static/dev/sdc1
2 8 49 2 active sync /dev/.static/dev/sdd1
ทีแรกไม่เข้าใจ คิดว่าจะทำแบบมี 1 SPARE ไปตลอด เนื้อที่หายไป 300GB คงแย่เลย
ตกลงได้ 600GB ถูกต้องตามต้องการ
ลอง Reboot ดูก็พบว่า /dev/md0 โผล่ขึ้นมาเลย
ทั้งๆที่ยังไม่ได้ไปแก้ Partition ID อะไร
และมี Process mdadm -F ทำงานอยู่ในโหมด Monitor
คอยส่งเมล์ไปให้ root หากมีอะไรเกิดขึ้นกับ RAID5 ตัวนี้
8706 ? Ss 0:00 /sbin/mdadm -F -i /var/run/mdadm.pid -m root -f -s
เจ๋ง+ง่าย ดี :)
LVM
ได้ /dev/md0 มาแล้ว ว่าจะ Format เลย คิดไปคิดมา ลองเล่น
LVM ดูบ้างดีกว่า
เท่าที่เคยอ่าน จุดเด่นของ LVM คือ ยืดหดได้ ย้ายที่ได้ง่าย และทำ Snapshot ได้
ขั้นตอนมีอยู่ได้ว่า
- เอา Partition ของ HardDisk ที่มี มาทำเป็น PV (Physical Volume)
- เอา PV หลายๆอัน มารวมกันเป็น VG (Volume Group)
- แบ่ง VG ออกเป็นส่วนๆตามต้องการ สำหรับแต่ละ File System แต่ละส่วนเรียกว่า LV (Logical Volume)
ขั้นแรก เอา
/dev/md0 มาทำให้เป็น PV
# pvcreate /dev/md0
Physical volume "/dev/md0" successfully created
ขั้นต่อไป สร้าง VG ชื่อ "honey_group" จาก PV ซึ่งบังเอิญมีแค่ตัวเดียว
# vgcreate honey_group /dev/md0
Volume group "honey_group" successfully created
ตรวจสอบ
# vgdisplay
--- Volume group ---
VG Name Ubuntu
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 279.15 GB
PE Size 4.00 MB
Total PE 71462
Alloc PE / Size 71462 / 279.15 GB
Free PE / Size 0 / 0
VG UUID R6LjNt-EY2N-98nE-IqrH-sBu3-P8tC-Op9PHC
--- Volume group ---
VG Name honey_group
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 558.78 GB
PE Size 4.00 MB
Total PE 143047
Alloc PE / Size 0 / 0
Free PE / Size 143047 / 558.78 GB
VG UUID XkNJGo-4q8s-BOD1-veBq-gBB6-aGxB-04t6Y9
อันบน "Ubuntu" เป็นอันที่ Ubutun สร้างให้ตอนเลือกติดตั้งลงบน LVM
หลังจากนั้นก็สร้าง LV บน VG นี้ (ขนาด 558G เอามาจากบรรทัด "Free PE" ข้างบน)
# lvcreate -L558G -nhoneyhome honey_group
Logical volume "honeyhome" created
ตรวจสอบ
root@honey:/home/vuthi# lvdisplay
--- Logical volume ---
LV Name /dev/Ubuntu/root
VG Name Ubuntu
LV UUID pguS5X-B6t0-tTf2-cQYD-ZWHP-mNYB-jKx5Oy
LV Write Access read/write
LV Status available
# open 1
LV Size 267.83 GB
Current LE 68565
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:0
--- Logical volume ---
LV Name /dev/Ubuntu/swap_1
VG Name Ubuntu
LV UUID 2mPHNn-sNfN-VJcQ-QZ8U-zsPF-5Yqz-8TE8AM
LV Write Access read/write
LV Status available
# open 1
LV Size 11.32 GB
Current LE 2897
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:1
--- Logical volume ---
LV Name /dev/honey_group/honeyhome
VG Name honey_group
LV UUID Nts6Xl-z9ti-SwzK-A3g1-NbgE-GAwe-jY2Piy
LV Write Access read/write
LV Status available
# open 0
LV Size 558.00 GB
Current LE 142848
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 254:6
สองอันบน "root" กับ "swap_1" Ubutun สร้างให้ตอนเลือกติดตั้งลงบน LVM
เมื่อได้ LV ชื่อ /dev/honey_group/honeyhome มาแล้วก็จัดการสร้าง File System
# mkfs.ext3 -L HOME /dev/honey_group/honeyhome
mke2fs 1.38 (30-Jun-2005)
Filesystem label=HOME
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
73138176 inodes, 146276352 blocks
7313817 blocks (5.00%) reserved for the super user
First data block=0
4464 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
จากนี้ก็ทำการ mount
/dev/honey_group/honeyhome ได้ตามปกติ
ถ้าเข้าไปดูใต้ /dev จะเห็นว่าความจริงแล้ว
/dev/honey_group/honeyhome เป็น symlink ไปยัง
"VG-LV" ใต้ /dev/mapper/ อีกทีหนึ่ง คือ
/dev/mapper/honey_group-honeyhome