parted
Create a single, aligned partition on a drive larger than 2TB.
% sudo parted /dev/sdx (parted)% mklabel gpt (parted)% mkpart primary 1 -1
Create a single, aligned partition on a drive larger than 2TB.
% sudo parted /dev/sdx (parted)% mklabel gpt (parted)% mkpart primary 1 -1
Tests are done across four 7200RPM SATAII drives on a PCI-X card sitting on a PCI (32-bit, 133MB/sec theoretical max) bus, probably the slowest bus configuration possible, and then again after being moved to a motherboard with dual PCI-X slots. Server is running Ubuntu 9.10 AMD64 Server.
Benchmark is a simple ‘dd’ sequential read and write.
write: dd if=/dev/zero of=/dev/md2 bs=1M
read: dd if=/dev/md2 of=/dev/null bs=1M
mdadm –create /dev/md2 –verbose –level=10 –layout=n2 –raid-devices=4 /dev/sd[ftlm]1
| PCI | PCI-X | |
| write: | 13.2 MB/s | 144 MB/s |
| read: | 4.0 MB/s | 89.3 MB/s |
mdadm –create /dev/md2 –verbose –level=10 –layout=f2 –raid-devices=4 /dev/sd[ftlm]1
| PCI | PCI-X | |
| write: | 48.3 MB/s | 131 MB/s |
| read: | 92.7 MB/s | 138 MB/s |
mdadm –create /dev/md2 –verbose –level=10 –layout=o2 –raid-devices=4 /dev/sd[ftlm]1
| PCI | PCI-X | |
| write: | 47.4 MB/s | 135 MB/s |
| read: | 98.7 MB/s | 142 MB/s |
And more comparisons:
RAID1 (PCI)
write: 38.9 MB/s
read: 64.8 MB/s
Single Disk (PCI)
write: 59.4 MB/s
read: 71.9 MB/s
Have an LVM device left on your system from a drive that was removed before pvremove was run?
1 | $ sudo dmsetup remove /dev/mapper/removed-device |
LVM allows you to hot add devices to expand volume space. It also allows you to hot remove devices, as long as there are enough free extents in the volume group (vgdisplay) to move data around. Here I’m going to replace a 400 GB drive (sdg) with a 750 GB one (sdf) from logical volume “backup” on volume group “disks”. It does not matter how many hard drives are in the volume group, and the filesystem can stay mounted.
1 | $ sudo pvcreate /dev/sdh1 |
1 | $ sudo vgextend disks /dev/sdh1 |
1 | $ sudo pvmove -v /dev/sdg1 |
1 | $ sudo vgreduce disks /dev/sdg1 |
1 | $ sudo lvextend -l+83463 /dev/disks/backup |
1 | $ sudo resize2fs /dev/disks/backup |
Scan a system for RAID arrays and save findings so the array reappears across reboots:
1 | # mdadm --detail --scan >> /etc/mdadm/mdadm.conf |
Create a RAID5 array out of sdm1, sdj1, and a missing disk (all partitioned with raid-autodetect partitions)
1 | # mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sd[mj]1 missing |
Create a RAID1 array
1 | # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sd[ts]1 |
Remove a RAID array
1 2 | # mdadm --stop /dev/md1 # mdadm --zero-superblock /dev/sd[ts]1 |
Replace a failed drive that has been removed from the system
1 | # mdadm /dev/md3 --add /dev/sdc1 --remove detached |
/dev/md0:
Timing buffered disk reads: 1248 MB in 3.00 seconds = 415.65 MB/sec
| distro | kernel version | mdadm version |
| Ubuntu 6.06 LTS | 2.6.15 | 1.12.0 |
| Ubuntu 7.04 | 2.6.20 | 2.5.6 |
| Ubuntu 8.04 LTS | 2.6.24 | 2.6.3 |
| Ubuntu 8.10 | 2.6.27 | 2.6.7 |
| Ubuntu 9.04 | 2.6.28 | 2.6.7.1 |
| Ubuntu 10.04 LTS | 2.6.32 | 2.6.7.1 |
| Ubuntu 10.10 | 2.6.35 | 2.6.7.1 |
| Ubuntu 11.04 | 2.6.38 | 3.1.4 |
| CentOS 4.5 | 2.6.9 | 1.12.0 |
| CentOS 5.0 | 2.6.18 | 2.5.4 |
| CentOS 6.0 | 2.6.32 | 3.1.3 |
| Debian 4.0 | 2.6.18 | 2.5.6 |
| Debian 5.0 | 2.6.26 | 2.6.7.2 |
| Debian 6.0 | 2.6.32 | 3.1.4 |
| Fedora 7 | 2.6.21 | 2.6.1 |
| Fedora 15 | 2.6.38 | 3.1.5 |
MDADM 2.x on kernels >2.6.17 supports online resizing of RAID 5 arrays
# cat /proc/mdstat
md0 : active raid5 sdf1[7] sdb1[0] sde1[5] sdg1[4] sdh1[3] sdd1[2] sdc1[1]
1465175424 blocks level 5, 64k chunk, algorithm 2 [7/6] [UUUUUU_]
[>....................] recovery = 1.3% (3331200/244195904) finish=2357.0min speed=1700K/sec
Ouch. Two files are used to control the speed of rebuilding RAID arrays in Linux.
/proc/sys/dev/raid/speed_limit_min
/proc/sys/dev/raid/speed_limit_max
Even though my _max file is set to 200,000K/sec and my system is not doing anything, my RAID 5 rebuild process is hovering around the _min rebuild speed, of 1,000K/sec. With my setup this will take approximately 40 hours to complete, which is too long for me to wait. So, I pushed the _min speed up to 10,000K/sec, which will now take 6 hours to finish, and use slightly more of my system’s idle resources.
root# echo “10000″ > /proc/sys/dev/raid/speed_limit_min
Later I set _min to 50,000K/sec, and the rebuild speed topped out at 25,000K/sec.
#cat /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdf1[7] sdb1[0] sde1[5] sdg1[4] sdh1[3] sdd1[2] sdc1[1]
1465175424 blocks level 5, 64k chunk, algorithm 2 [7/6] [UUUUUU_]
[=>...................] recovery = 5.1% (12661840/244195904) finish=149.9min speed=25726K/sec
The rebuild took less than 3 hours, down from the original 40.
I recently upgrade my main workstation’s hard drive under Ubuntu 6.10 and noticed a couple things changed during the process. Here are my instructions for a fast and reliably hard drive swap. I’m using SATA drives without LVM using the default Ubuntu install and partition options for this howto.
My server decided that an executable file didn’t really exist on the file system, or so I thought. Lack of sleep was the main problem, but here are some things I did to check my file system for errors. I setup this file system on a Ubuntu 6.06 AMD64 install with LVM, so everything is in LVM instead of standard partitions.
# sudo e2fsck -n /dev/mapper/Ubuntu-root
This was showing errors, but I ran it while the system was mounted and running, so there were open files, so this was normal. The -n kept e2fsck from attempting to fix anything, which was good because later I ran the command after booting from an Ubuntu LiveCD and found no errors.
Before booting from the LiveCD I tried to get the system to fix itself by running fsck on boot. Two methods I used to do this on Ubuntu were running these from the live system before rebooting, they both accomplish the same thing, so only one was really needed.
# sudo touch /forcefsck
# sudo tune2fs -C 40 /dev/mapper/Ubuntu-root
These appeared to have no affect, probably because the filesystem was fine, but I took down the system and ran fsck from a LiveCD instead. Of course, this wasn’t as simple as it should have been, the LiveCD did not detect my LVM volumes, so /dev/mapper/Ubuntu-root was missing. The fix was to install LVM2 and start it up.
# sudo apt-get install lvm2
# sudo /etc/init.d/lvm start
The /dev/mapper/ entries then appeared and I could run all the fscks I wanted. At this point my fsck checks were coming out clean, so file system corruption was not to blame.