
저는 크기와 구조가 서로 다른 세 개의 소프트웨어 RAID가 있는 시스템에서 Ubuntu 22.04를 실행합니다. 그 중 두 개는 md5
매우 md6
큽니다. 디스크는 특정한 이유로 이러한 어레이 간에 공유됩니다.
매달 cron
자동으로 소프트웨어 RAID 어레이의 재검사를 시작합니다. 공유 디스크로 인해 주어진 시간에 세 가지 RAID 검사 중 하나만 실행할 수 있으며 나머지 검사는 자동으로 일시 중지됩니다. 게다가 재확인은 매일 6시간 동안만 실행됩니다. 하지만 6시간의 시작 시간이 어떻게 결정되는지는 모르겠습니다.
둘째 날 md6
재검사가 중단되었을 때 파일 시스템이 정지 상태에서 마운트되었습니다 . md6
해당 파일 시스템에 대한 읽기 및 쓰기가 포함된 모든 프로세스와 스레드가 "무중단 절전" 상태에 빠졌습니다. 어레이를 강제로 마운트 해제하거나 강제로 분해하는 것도 불가능했기 때문에 데이터에 다시 액세스하려면 재부팅해야 했습니다. 효과적인 DOS 외에는 데이터가 손실되지 않은 것 같습니다.
로그에서 다음과 같은 일이 일어나는 것을 볼 수 있습니다. 첫날에는 세 어레이 모두의 검사가 동시에 시작됩니다. 가장 작은 배열인 은 md1
누가 먼저 검사를 받는지 경주에서 승리하며, md5
와 md6
기다려야 합니다. md1
10분 이내에 완료되고 md6
1일이 끝날 때까지 계속됩니다.
2일차에는 md5
(이미 시작된 것이 아닙니다 md6
!) 체크를 받은 사람이 승리합니다. 6시간이 지나면 md5
당일 점검이 중단됩니다. md6
몇 밀리초 후에 "run" 명령을 받은 것으로 보이는 는 실행을 시작하지만 시작과 동일한 초 이내에 6시간 정지를 수신합니다.
에 대한 매우 빠른 시작-중지 후에는 md6
정지 md6
됩니다. 로그의 첫 번째 징후는 파일 시스템 저널에 대한 쓰기 시도가 2분 이상 차단되었다는 경고입니다.
다음은 로그의 관련 부분입니다("M"은 시스템 이름입니다).
Sep 4 08:23:59 M root: mdcheck start checking /dev/md1
Sep 4 08:23:59 M kernel: [1682166.084604] md: data-check of RAID array md1
Sep 4 08:24:00 M root: mdcheck start checking /dev/md5
Sep 4 08:24:00 M kernel: [1682167.725977] md: delaying data-check of md5 until md1 has finished (they share one or more physical units)
Sep 4 08:24:00 M root: mdcheck start checking /dev/md6
Sep 4 08:24:00 M kernel: [1682167.758063] md: delaying data-check of md6 until md5 has finished (they share one or more physical units)
Sep 4 08:33:23 M kernel: [1682730.686726] md: md1: data-check done.
Sep 4 08:33:23 M kernel: [1682730.697864] md: data-check of RAID array md6
Sep 4 08:33:23 M kernel: [1682730.697864] md: delaying data-check of md5 until md6 has finished (they share one or more physical units)
Sep 4 08:34:01 M root: mdcheck finished checking /dev/md1
Sep 4 14:24:02 M root: pause checking /dev/md5 at 0
Sep 4 14:24:03 M kernel: [1703770.476375] md: md6: data-check interrupted.
Sep 4 14:24:03 M root: pause checking /dev/md6 at 5702160936
Sep 4 14:24:03 M systemd[1]: mdcheck_start.service: Deactivated successfully.
Sep 4 14:24:03 M systemd[1]: mdcheck_start.service: Consumed 1.957s CPU time.
Sep 4 20:03:05 M systemd[1]: mdmonitor-oneshot.service: Deactivated successfully.
Sep 5 07:02:14 M root: mdcheck continue checking /dev/md5 from 0
Sep 5 07:02:14 M kernel: [1763663.944043] md: data-check of RAID array md5
Sep 5 07:02:14 M root: mdcheck continue checking /dev/md6 from 5702160936
Sep 5 07:02:14 M kernel: [1763663.980271] md: delaying data-check of md6 until md5 has finished (they share one or more physical units)
Sep 5 13:02:26 M kernel: [1785276.510597] md: md5: data-check interrupted.
Sep 5 13:02:27 M kernel: [1785276.786479] md: data-check of RAID array md6
Sep 5 13:02:27 M root: pause checking /dev/md5 at 5824508144
Sep 5 13:02:27 M kernel: [1785276.795438] md: md6: data-check interrupted.
Sep 5 13:05:31 M kernel: [1785461.181277] INFO: task jbd2/md6-8:2495 blocked for more than 120 seconds.
Sep 5 13:05:31 M kernel: [1785461.181441] task:jbd2/md6-8 state:D stack: 0 pid: 2495 ppid: 2 flags:0x00004000
Sep 5 13:05:31 M kernel: [1785461.181742] md_write_start.part.0+0x174/0x220
Sep 5 13:05:31 M kernel: [1785461.181753] md_write_start+0x14/0x30
Sep 5 13:05:31 M kernel: [1785461.181781] md_handle_request+0x12d/0x1b0
Sep 5 13:05:31 M kernel: [1785461.181792] md_submit_bio+0x71/0xc0
Sep 5 14:44:14 M systemd[1]: mdmonitor-oneshot.service: Deactivated successfully.
/
파일 시스템 은 /home
영향을 받지 않은 RAID에 있기 때문에 md6
. cat /proc/mdstat
다음 정보를 제공했습니다.
Personalities : [raid1] [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid10]
md5 : active raid5 sdd4[1] sdk4[2] sdh4[0] sdl4[4]
11415389184 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 0/29 pages [0KB], 65536KB chunk
md1 : active raid1 sdd3[0] sdk3[1] sdh3[3] sdl3[2]
100596736 blocks super 1.2 [4/4] [UUUU]
md6 : active raid6 sdd2[10] sdk2[9] sdh2[11] sdl2[8] sdg[5] sdf[4] sdb[1] sdc[2] sdi[6] sde[3] sdj[7] sda[0]
117186867200 blocks super 1.2 level 6, 512k chunk, algorithm 2 [12/12] [UUUUUUUUUUUU]
[====>................] check = 24.3% (2851080676/11718686720) finish=95845361544.0min speed=0K/sec
bitmap: 0/88 pages [0KB], 65536KB chunk
이는 /proc/mdstat
2851080676이 5702161352 섹터와 동일한 1kB 블록으로 재검사 위치를 반환하는 것으로 보입니다. 이는 syslog
전날 도달한 위치로 로그인된 5702160936에서 불과 416 섹터(1 청크 미만!) 떨어져 있습니다. . 따라서 시작 시 교착 상태가 발생했다고 가정하고 즉시 다시 확인을 중지했습니다.
지금까지의 완화 방법은 자동 MD RAID 재검사를 비활성화하는 것이었습니다.
답변1
이 버그가 발생했을 수 있습니다.https://bugs.launchpad.net/ubuntu/+source/linux-signed-hwe-5.11/+bug/1942935. 이는 Linux v5.19에서 수정되는 패치가 포함된 업스트림 커널 버그입니다.
에서코멘트 10, 다음 해결 방법을 시도해 볼 수 있습니다( 먼저 / /etc md1
로 전환 ).md5
md6
echo active | sudo tee /sys/block/md1/md/array_state