6개의 4TB 디스크로 구성된 작동 중인 RAID5 어레이가 있었습니다. Smartd는 디스크 중 하나가 실패하기 시작했다고 보고했습니다. 나는 한 번의 작업으로 여러 가지 작업을 수행하기로 결정했습니다. 1) 오류가 있는 디스크를 제거하고 2) 새 디스크를 추가하여 교체하고 3) 어레이에 몇 개의 디스크를 더 추가하고 확장합니다.
(3)에는 더 작은 디스크만 있었기 때문에 LVM을 사용하여 4TB보다 큰 볼륨에 더 작은 디스크를 결합했습니다.
제가 실행한 순서는 다음과 같습니다.
1) vgcreate vg_sdi_sdj /dev/sdi1 /dev/sdj1
2) vgcreate vg_sdj_sdl /dev/sdk1 /dev/sdl1
3) lvcreate -l 100%FREE -n all vg_sdi_sdj
4) lvcreate -l 100%FREE -n all vg_sdk_sdl
5) mdadm --manage /dev/md1 --add /dev/sdg1
6) mdadm --manage /dev/md1 --add /dev/vg_sdi_sdj/all
7) mdadm --manage /dev/md1 --add /dev/vg_sdk_sdl/all
8) mdadm --manage /dev/md1 --fail /dev/sdc1
9) mdadm --grow --raid-devices=8 --backup-file=/home/andrei/grow_md1.bak /dev/md1
처음에는 모든 것이 거의 순조롭게 진행되었습니다. 어레이 재구축이 시작되었습니다. 유일한 이상한 점은 백업 파일이 생성되지 않았다는 것입니다. 나는 달리고 있었다
watch -n 1 mdadm --detail /dev/md1
nmon
사물을 주시하기 위해 백그라운드에서. 재구축이 진행되는 동안 어레이에 액세스할 수 있었습니다.
그러나 프로세스가 9% 진행되는 동안 /dev/sdb 및 /dev/sdb1에서 100% 읽기를 제외하고 어레이의 모든 I/O가 중지되었습니다. watch -n 1 mdadm을 종료하면 그것도 중지되었습니다.
mdadm --detail의 최근 출력은 다음과 같습니다.
/dev/md1: Version : 1.2 Creation Time : Sun Jan 8 22:16:01 2017 Raid Level : raid5 Array Size : 19534430720 (18629.49 GiB 20003.26 GB) Used Dev Size : 3906886144 (3725.90 GiB 4000.65 GB) Raid Devices : 8 Total Devices : 8 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Sun Jan 15 21:38:17 2017 State : clean, degraded, reshaping Active Devices : 7 Working Devices : 8 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 512K Reshape Status : 9% complete Delta Devices : 2, (6->8) Name : server:1 (local to host server) UUID : bec66f95:2975e7ae:8f8ba15c:8eb3a33f Events : 79504 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 9 252 0 1 spare rebuilding /dev/dm-0 2 8 49 2 active sync /dev/sdd1 3 8 145 3 active sync /dev/sdj1 4 8 161 4 active sync /dev/sdk1 6 8 177 5 active sync /dev/sdl1 8 252 1 6 active sync /dev/dm-1 7 8 129 7 active sync /dev/sdi1
어레이에서 I/O를 수행할 수 없습니다. htop을 실행하면 하나의 CPU 코어가 I/O 작업을 수행하는 동안 100% 고정된 것으로 나타났습니다.
기계를 재부팅했습니다. 어레이가 다시 조립되지 않았습니다. 다음을 실행하여 수동으로 다시 어셈블했습니다.
mdadm --assemble /dev/md1 --force /dev/sdb1 /dev/sdd1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1 /dev/vg_sdi_sdj/all /dev/vg_sdk_sdl/all
(재부팅 후 디스크 이름이 변경됨) 그러나 lvm은 볼륨과 그룹을 올바르게 찾아 가져왔습니다.
힘이 없으면 공놀이를 할 수 없습니다. 위에서 인용한 --detail 보고서를 모아서 표시했습니다.
그러나 여전히 I/O를 허용하지 않으므로 mount 명령이 중단되었습니다(여기에는 단일 디스크 LVM이 있고 내부에는 ext4 파일 시스템이 있습니다). htop은 또한 I/O와 고정된 하나의 CPU 코어를 보여주었습니다.
그러나 디스크 활동 LED는 전혀 켜져 있지 않습니다.
현재 나는 상당한 양의 데이터가 들어 있는 비기능적 배열에 갇혀 있습니다. 이상적으로는 데이터를 검색하고 싶습니다.
아마도 LVM 논리 볼륨을 mdadm "디스크"로 사용하는 것이 실수였을 것입니다. 작동하지 않을 것이라는 정보를 찾지 못했지만.
어레이를 복구하는 방법에 대한 조언과 조언을 주시면 정말 감사하겠습니다.
Journalctl -xe를 자세히 살펴보면 다음과 같습니다.
Jan 15 22:41:15 server sudo[1612]: andrei : TTY=tty1 ; PWD=/home/andrei ; USER=root ; COMMAND=/sbin/mdadm --assemble /dev/md1 --force /dev/sdb1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/vg_sdi_sdj/all /dev/vg_sdk_sdl/all
Jan 15 22:41:15 server sudo[1612]: pam_unix(sudo:session): session opened for user root by andrei(uid=0)
Jan 15 22:41:15 server kernel: md: md1 stopped.
Jan 15 22:41:15 server kernel: md: bind<dm-1>
Jan 15 22:41:15 server kernel: md: bind<sdd1>
Jan 15 22:41:15 server kernel: md: bind<sdg1>
Jan 15 22:41:15 server kernel: md: bind<sdh1>
Jan 15 22:41:15 server kernel: md: bind<sdf1>
Jan 15 22:41:15 server kernel: md: bind<dm-0>
Jan 15 22:41:15 server kernel: md: bind<sde1>
Jan 15 22:41:15 server kernel: md: bind<sdb1>
Jan 15 22:41:15 server mdadm[879]: NewArray event detected on md device /dev/md1
Jan 15 22:41:15 server mdadm[879]: DegradedArray event detected on md device /dev/md1
Jan 15 22:41:15 server kernel: md/raid:md1: reshape will continue
Jan 15 22:41:15 server kernel: md/raid:md1: device sdb1 operational as raid disk 0
Jan 15 22:41:15 server kernel: md/raid:md1: device sde1 operational as raid disk 7
Jan 15 22:41:15 server kernel: md/raid:md1: device dm-0 operational as raid disk 6
Jan 15 22:41:15 server kernel: md/raid:md1: device sdf1 operational as raid disk 5
Jan 15 22:41:15 server kernel: md/raid:md1: device sdh1 operational as raid disk 4
Jan 15 22:41:15 server kernel: md/raid:md1: device sdg1 operational as raid disk 3
Jan 15 22:41:15 server kernel: md/raid:md1: device sdd1 operational as raid disk 2
Jan 15 22:41:15 server kernel: md/raid:md1: allocated 8606kB
Jan 15 22:41:15 server kernel: md/raid:md1: raid level 5 active with 7 out of 8 devices, algorithm 2
Jan 15 22:41:15 server kernel: RAID conf printout:
Jan 15 22:41:15 server kernel: --- level:5 rd:8 wd:7
Jan 15 22:41:15 server kernel: disk 0, o:1, dev:sdb1
Jan 15 22:41:15 server kernel: disk 1, o:1, dev:dm-1
Jan 15 22:41:15 server kernel: disk 2, o:1, dev:sdd1
Jan 15 22:41:15 server kernel: disk 3, o:1, dev:sdg1
Jan 15 22:41:15 server kernel: disk 4, o:1, dev:sdh1
Jan 15 22:41:15 server kernel: disk 5, o:1, dev:sdf1
Jan 15 22:41:15 server kernel: disk 6, o:1, dev:dm-0
Jan 15 22:41:15 server kernel: disk 7, o:1, dev:sde1
Jan 15 22:41:15 server kernel: created bitmap (30 pages) for device md1
Jan 15 22:41:15 server kernel: md1: bitmap initialized from disk: read 2 pages, set 7 of 59615 bits
Jan 15 22:41:16 server kernel: md1: detected capacity change from 0 to 20003257057280
Jan 15 22:41:16 server kernel: md: reshape of RAID array md1
Jan 15 22:41:16 server kernel: md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
Jan 15 22:41:16 server kernel: md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for reshape.
Jan 15 22:41:16 server kernel: md: using 128k window, over a total of 3906886144k.
Jan 15 22:41:16 server mdadm[879]: RebuildStarted event detected on md device /dev/md1
Jan 15 22:41:16 server sudo[1612]: pam_unix(sudo:session): session closed for user root
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589312 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589320 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589328 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589336 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589344 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589352 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589360 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589368 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759589376 on sdf1)
Jan 15 22:41:23 server kernel: md/raid:md1: read error corrected (8 sectors at 759582288 on sdf1)
...
Jan 15 22:43:36 server kernel: INFO: task md1_reshape:1637 blocked for more than 120 seconds.
Jan 15 22:43:36 server kernel: Not tainted 4.4.0-59-generic #80-Ubuntu
Jan 15 22:43:36 server kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Jan 15 22:43:36 server kernel: md1_reshape D ffff88021028bb68 0 1637 2 0x00000000
Jan 15 22:43:36 server kernel: ffff88021028bb68 ffff88021028bb80 ffffffff81e11500 ffff88020f5e8e00
Jan 15 22:43:36 server kernel: ffff88021028c000 ffff8800c6993288 ffff88021028bbe8 ffff88021028bd14
Jan 15 22:43:36 server kernel: ffff8800c6993000 ffff88021028bb80 ffffffff818343f5 ffff8802144c7000
Jan 15 22:43:36 server kernel: Call Trace:
Jan 15 22:43:36 server kernel: [<ffffffff818343f5>] schedule+0x35/0x80
Jan 15 22:43:36 server kernel: [<ffffffffc01d2fec>] reshape_request+0x7fc/0x950 [raid456]
Jan 15 22:43:36 server kernel: [<ffffffff810c4240>] ? wake_atomic_t_function+0x60/0x60
Jan 15 22:43:36 server kernel: [<ffffffffc01d346b>] sync_request+0x32b/0x3b0 [raid456]
Jan 15 22:43:36 server kernel: [<ffffffff81833d46>] ? __schedule+0x3b6/0xa30
Jan 15 22:43:36 server kernel: [<ffffffff8140c305>] ? find_next_bit+0x15/0x20
Jan 15 22:43:36 server kernel: [<ffffffff81704c5c>] ? is_mddev_idle+0x9c/0xfa
Jan 15 22:43:36 server kernel: [<ffffffff816a20fc>] md_do_sync+0x89c/0xe60
Jan 15 22:43:36 server kernel: [<ffffffff810c4240>] ? wake_atomic_t_function+0x60/0x60
Jan 15 22:43:36 server kernel: [<ffffffff8169e689>] md_thread+0x139/0x150
Jan 15 22:43:36 server kernel: [<ffffffff810c4240>] ? wake_atomic_t_function+0x60/0x60
Jan 15 22:43:36 server kernel: [<ffffffff8169e550>] ? find_pers+0x70/0x70
Jan 15 22:43:36 server kernel: [<ffffffff810a0c08>] kthread+0xd8/0xf0
Jan 15 22:43:36 server kernel: [<ffffffff810a0b30>] ? kthread_create_on_node+0x1e0/0x1e0
Jan 15 22:43:36 server kernel: [<ffffffff8183888f>] ret_from_fork+0x3f/0x70
Jan 15 22:43:36 server kernel: [<ffffffff810a0b30>] ? kthread_create_on_node+0x1e0/0x1e0
답변1
이를 위해 LVM을 사용한 것은 실제로 실수였습니다. 작성자 이외의 모든 사람에게 불필요하고 복잡한 스토리지 스택을 만들 뿐만 아니라 MD 어레이는 LVM 어레이보다 먼저 구축되므로 MD 구성원 역할을 하는 LV에서 MD 스캐닝을 수동으로 호출해야 합니다.
또한 영구 구성(예: sda, sdb 등)에서 커널 장치 이름을 사용하지 마십시오. VG는 기본 스토리지를 추상화하고 PV 간에 자유롭게 이동할 수 있으므로 볼륨 그룹 이름을 지정할 때 특히 중요합니다. 커널 장치 이름도 영구적인 것으로 간주되지 않으며 다양한 이유로 언제든지 변경될 수 있습니다. 이는 LVM PV의 경우 문제가 되지 않습니다(대규모 디스크 스캔의 일부이고 거의 모든 것을 선택하므로). 그러나 VG 이름은 사용자가 만든 상황의 현실을 빠르게 반영하지 않습니다.
MD 어레이에서 LV를 정상적으로 제거하고 성능이 저하되었지만 정상적인 상태로 되돌리는 것이 좋습니다. LVM 위에 있는 MD는 버그를 박살낼 때 사람들이 신경 쓰는 것이 아니라는 점에 유의하세요. 당신은 미지의 영역에 있고, 당신이 성공할 것으로 기대했던 일이 뚜렷한 이유 없이 실패할 수도 있습니다.
이 데이터가 중요하고 백업되지 않은 경우 LVM 및 MD를 잘 아는 현장 직원에게 맡기고 싶을 것입니다. 여기에서 물어보시니까 그런 건 없을 거라 생각하고, 필요하면 얘기하자. 해당 경로로 이동해야 하는 경우 흥미로운 세부정보로 이를 업데이트하겠습니다. 지금은 LVM 혼란을 구성원의 기존 디스크로 교체하여 백 페달을 시도하십시오.