Сервер з mdadm Raid6 на Ubuntu 20
диски в масивах треба регулярно перевіряти. Знайшов bash-скрипт і трохи вдосконалив:
#!/bin/bash
for i in {a..q}; do
echo "Disk sd$i" $SN $MD
smartctl -i -A /dev/sd$i |grep -E "^ "5"|^"197"|^"198"|"FAILING_NOW"|"Serial""
done
Несподівано, на одному з дисків
Disk sdq
Device Model: HGST HUH721008ALE604
Serial Number: 1SGUPUEZ
5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0
197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 2048
198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 1170
диск розбито так (fdisk -l):
Disk /dev/sdq: 7.28 TiB, 8001563222016 bytes, 15628053168 sectors
Disk model: HGST HUH721008AL
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 492E1319-B4D8-4E83-94AB-C9FFD86EDB4B
Device Start End Sectors Size Type
/dev/sdq1 2048 15628053134 15628051087 7.3T Linux filesystem
новий диск розбиваю так само, все по дефолту – створив партицію на весь диск, вона автоматично активна. Далі робота по заміні диску:
Перед вимкненням серверу – виймаю диск з масиву:
mdadm –manage /dev/md0 –fail /dev/sdq1
mdadm –manage /dev/md0 –remove /dev/sdq1
Після заміни диску – увімкнув сервер і додав до масиву (попередньо впевнився шо масив не в статусі ребілд):
mdadm –manage /dev/md0 –add /dev/sdq1
Перевіряю, що з масивом:
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid6 sdq1[16] sdb1[0] sdp1[14] sdo1[13] sdn1[12] sdm1[11] sdl1[10] sdk1[9] sdh1[8] sdj1[7] sdi1[6] sdg1[5] sdf1[4] sde1[3] sdd1[2] sdc1[1]
109394503680 blocks super 1.2 level 6, 512k chunk, algorithm 2 [16/15] [UUUUUUUUUUUUUUU_]
[==>..................] recovery = 10.1% (789455804/7813893120) finish=706.7min speed=165644K/sec
bitmap: 0/59 pages [0KB], 65536KB chunk
unused devices: <none>
Власне – готово.
І тут як буває – не все гаразд, при перезавантаженні не бачить md0 не збирає його автоматично.
Рішення:
fstab – монтую по ID (бо при створенні може створитись не md0 а, наприклад md170)
/dev/disk/by-uuid/74e7a502-f59d-4156-99cb-517e0bbecc70 /var/nc_data ext4 defaults,nofail,discard 0 0
Та за розкладом запускаю щось таке:
#crontab -l
*/15 * * * * /opt/raid-check.sh
# cat /opt/raid-check.sh
#!/bin/bash
file=/dev/md0
if [ ! -e "$file" ]; then
echo "File does not exist"
mdadm --assemble --scan
mount -a
else
echo "File exists"
fi
як правильно виконати задачу не знайшов, бо вирішив так (пропонують додавати в ініт свої скрипти, наприклад, що як на мене – те саме)
Додатково для зацікавлених. Довідкова інформація:
конфіг масиву:
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid6 sdc1[0] sdq1[15] sdp1[14] sdo1[13] sdn1[12] sdm1[11] sdl1[10] sdk1[9] sdh1[8] sdj1[7] sdi1[6] sdg1[5] sdf1[4] sde1[3] sdd1[2] sdb1[1]
109394503680 blocks super 1.2 level 6, 512k chunk, algorithm 2 [16/16] [UUUUUUUUUUUUUUUU]
bitmap: 0/59 pages [0KB], 65536KB chunk
unused devices: <none>
# cat /etc/mdadm/mdadm.conf
ARRAY /dev/md/oc-server:0 level=raid6 num-devices=16 metadata=1.2 name=oc-server:0 UUID=909ef785:11edea8c:0d9c5b27:5c3c4df3
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1,/dev/sdf1,/dev/sdg1,/dev/sdh1,/dev/sdi1,/dev/sdj1,/dev/sdk1,/dev/sdl1,/dev/sdm1,/dev/sdn1,/dev/sdo1,/dev/sdp1,/dev/sdq1
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1 /dev/sdm1 /dev/sdn1 /dev/sdo1 /dev/sdp1 /dev/sdq1
CREATE owner=root group=disk mode=0660 auto=yes
ARRAY /dev/md0 UUID=909ef785:11edea8c:0d9c5b27:5c3c4df3
# cat /etc/fstab
# /etc/fstab: static file system information.
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/67958d42-a663-4c1b-8a9c-f8d2e20b6a03 / ext4 defaults 0 0
# /boot/efi was on /dev/sda1 during curtin installation
/dev/disk/by-uuid/AEE0-4B33 /boot/efi vfat defaults 0 0
/swap.img none swap sw 0 0
/dev/disk/by-uuid/74e7a502-f59d-4156-99cb-517e0bbecc70 /var/nc_data ext4 defaults,nofail,discard 0 0