Ahoj všichni,
předem díky za jakoukoliv konstruktivní radu, došly mi nápady.
ÚvodMám 7 disků, každý z nich 8 TB s jedním velkým oddílem
/dev/sd[bcdijkl]1, vytvářející přes mdadm RAID 6 jedno blokové zařízení
/dev/md0 velké 40007 GB. Na celém
/dev/md0 jsou data šifrovaná přes dm-crypt/LUKS, na kterém je LVM a na něm cca 20 oddílů ext4 a Btrfs, ale to je teď vedlejší, protože problém nastává již před připojením šifrovaného oddílu, tj. před provedením
cryptsetup luksOpen /dev/md0 <dm_name>.
Stručný popisObčas se čtou z mdadm RAID 6 pole /dev/md0 náhodná data, při současném zápisu se čtou velmi často náhodná data. Čtení z jednotlivých disků čte vždy stejná data, nikdy náhodná. Dle
mdadm check je pole v pořádku.
Experiment č. 1: čtení z /dev/md0Pokud zkusím číst opakovaně stejných 10 GiB z /dev/md0 od offsetu 1 TiB, mají data dle očekávání vždy stejný md5 checksum:
root@krato-space:~# for DEV in md0 ; do ( echo "==== $DEV ====" ; date ; for i in {1..6} ; do ( dd if=/dev/$DEV bs=1M count=10240 skip=1048576 status=none | md5sum )
; done ) ; done ; date
==== md0 ====
Po lis 26 12:13:26 CET 2018
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
Po lis 26 12:16:03 CET 2018
Experiment č. 2: čtení z /dev/md0Občas je oproti očekávání ne vždy stejný md5 checksum (viz poslední):
root@krato-space:~# for DEV in md0 ; do ( echo "==== $DEV ====" ; date ; for i in {1..4} ; do ( dd if=/dev/$DEV bs=1M count=10240 skip=1048576 status=none | md5sum ) ; done ) ; done ; date
==== md0 ====
Po lis 26 22:20:25 CET 2018
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
03247245c2a9920f6acc2ce7ce51ad92 -
1e434d76b388b0c21dec709a6d1b6d20 -
Po lis 26 22:22:08 CET 2018
Experiment č. 3: čtení z /dev/md0 při zápisuA teď pozor. Pokud při čtení zároveň probíhá jakýkoliv zápis na jiném místě pole, přečtu z /dev/md0 občas nebo pokaždé data s jiným checksumem.
Říkám si, že mi leží těch 7 SATA kabelů volně uvnitř i vně case (disky leží vedle case, dovnitř se už nevešly), tak zda nechytají nějaké rušení nebo nezlobí některý ze dvou SATA řadičů, jenže pokud čtu data z disků zvlášť, je checksum vždy v pořádku. První a poslední čtveřice jsou checksumy 10 GiB čtených z /dev/md0, sedm čtveřic mezi nimi jsou čtení z jednotlivých disků:
root@krato-space:~# for DEV in md0 sdb1 sdc1 sdd1 sdi1 sdj1 sdk1 sdl1 md0 ; do ( echo "==== $DEV ====" ; date ; for i in {1..4} ; do ( dd if=/dev/$DEV bs=1M count=10240 skip=1048576 status=none | md5sum ) ; done ) ; done ; date
==== md0 ====
Po lis 26 20:03:03 CET 2018
31a877f49150e0f6452b843d81a8c88d -
9b2010d3fb1344139f9eba21ad309b7b -
e11e03afc313e5de46105f15ffc33665 -
9bfde541773fc0ef03a4b1ff1c45621c -
==== sdb1 ====
Po lis 26 20:08:15 CET 2018
7fdc1658562a2ecd4d676bf656c973a7 -
7fdc1658562a2ecd4d676bf656c973a7 -
7fdc1658562a2ecd4d676bf656c973a7 -
7fdc1658562a2ecd4d676bf656c973a7 -
==== sdc1 ====
Po lis 26 20:26:35 CET 2018
7c671e9e47fdb2604e2ecfcea6009218 -
7c671e9e47fdb2604e2ecfcea6009218 -
7c671e9e47fdb2604e2ecfcea6009218 -
7c671e9e47fdb2604e2ecfcea6009218 -
==== sdd1 ====
Po lis 26 20:45:38 CET 2018
bb14e932be6c2ae2751404a997c24712 -
bb14e932be6c2ae2751404a997c24712 -
bb14e932be6c2ae2751404a997c24712 -
bb14e932be6c2ae2751404a997c24712 -
==== sdi1 ====
Po lis 26 20:56:27 CET 2018
4fb8ad4d063fff30e39ff64205713952 -
4fb8ad4d063fff30e39ff64205713952 -
4fb8ad4d063fff30e39ff64205713952 -
4fb8ad4d063fff30e39ff64205713952 -
==== sdj1 ====
Po lis 26 21:07:44 CET 2018
00528ce93f8c54882d022f976004442f -
00528ce93f8c54882d022f976004442f -
00528ce93f8c54882d022f976004442f -
00528ce93f8c54882d022f976004442f -
==== sdk1 ====
Po lis 26 21:38:04 CET 2018
33d73ace82b8bc28fd284fc32c216039 -
33d73ace82b8bc28fd284fc32c216039 -
33d73ace82b8bc28fd284fc32c216039 -
33d73ace82b8bc28fd284fc32c216039 -
==== sdl1 ====
Po lis 26 21:45:57 CET 2018
842b476f2973e16403f3fc1a031b968a -
842b476f2973e16403f3fc1a031b968a -
842b476f2973e16403f3fc1a031b968a -
842b476f2973e16403f3fc1a031b968a -
==== md0 ====
Po lis 26 21:53:30 CET 2018
e08baf910b005f1f001c8258330a0637 -
4ce735569e51ad0e75d4775a0a2e565b -
d740da3b4b7a2167ca369c9b00efe6d2 -
75f0c751bbd8f95b0ed6d49c379f9ff8 -
Po lis 26 22:06:22 CET 2018
Konkrétně u tohoto experimentu č. 3 jsem prováděl zápis tím způsobem, že jsem na jiném offsetu 1 GiB načetl 100 GiB dat do souboru na systémovém SSD disku:
dd if=/dev/md0 bs=1M count=102400 skip=1024 status=progress of=/root/md0_offset-1024M_size-102400M-2018-11-26-1308.bin
A tato data jsem pak při testu čtení v cyklu zapisoval zpět přesně tam, odkud jsem je přečetl:
for i in {1..10} ; do dd if=/root/md0_offset-1024M_size-102400M-2018-11-26-1308.bin bs=1M count=102400 seek=1024 status=progress of=/dev/md0 ; done
Chyba software vs. hardwareNezkouším koupit nový hardware (kabely, case, zdroj, disky, ...), protože při čtení z jednotlivých disků zvlášť nikdy tento problém nepozoruji.
Vyloučení nekonzistence dat RAID 6Už se určitě chystáte poradit
mdadm check a
mdadm resync. To by to ale bylo příliš jednoduché.
Před testy výše jsem provedl postupně:
- mdadm resync ... našel 3688 chyb (dle čísla v /sys/block/md0/md/mismatch_cnt)
- mdadm check ... našel 0 chyb (dle čísla v /sys/block/md0/md/mismatch_cnt)
Verze software
root@krato-space:~# lsb_release --description
Description: Ubuntu 18.04.1 LTS
root@krato-space:~# uname --all
Linux krato-space 4.19.2-041902-generic #201811132032 SMP Tue Nov 13 20:34:19 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@krato-space:~# mdadm --version
mdadm - v4.1-rc1 - 2018-03-22