Faith Club
Faith Club
16. Oktobris 2005
- 2005.10.16, 13:51
- RAID šobrīd ir viena milzīga problēma. Divas, īstenībā, bet otra izriet no pirmās.
( total probability of a double failure seems like it should be about 6 in a million per year )
Dzīves realitāte ir tāda, ka nākot klāt lielajiem diskiem, Linux Software RAID (un, iespējams, biezie hardware RAID arī) loģika ir neglābjami novecojusi.
Kāds ir Linux RAID modus operandi? Raid masīvs strādā:
1) Tikko uz kāda no diskiem tiek detektēts "bad block", tas disks tiek nomarķēt "failed" un izņemts no masīva. Sekojoši, redundancy ir pazaudēts.
2) Kamēr viens disks ir izņemts, nākamais atrastais "bad block" (uz pāri palikušajiem diskiem) būs catastrophic failure kad viss masīvs tiek aizsūtīts pa pipelēm.
Un kamēr viens disks ir down, tev ir vairākas stundas kamēr tu ieliksi jaunu disku, un lūgsies lai sinhronizēšanas laikā kādā no palikušajiem diskiem neatrodas kļūda, kas jau būtu fatāla.
Kur šeit ir loģika? Loģikas nav. Pirmais disks (1) īstenībā nav beigts, viņš ir pilnīgi perfektā darba kārtībā. Lielajiem mūsdienu diskiem "bad block" ir norma - jo bloku uz diska ir miljardi, un nav brīnums, ka kāds izrādās defektīvs. Priekš tam uz diska ir rezervēta vieta, un sliktie sektori tiek automātiski pārmapoti uz kādu no rezervētajiem sektoriem, un disks turpina strādāt it kā nekas nebūtu noticis!
Atkārtoju vēlreiz - īstenībā disks ir pilnībā darba spējīgs, un tā visi pārējie sektori ir pieejami un nolasāmi. Kļūda bija tikai vienā sektorā, un tas ir normāli - lieliem diskiem tas var gadīties.
Bet ko dara debīlais RAID? Debīlais RAID dēļ viena slikta sektora (tikai viena kļūdaina lasīšanas vai rakstīšanas pieprasījuma dēļ!) disku pilnībā noraksta kā nederīgu. Disku izgāž, it kā viņam būtu sadegusi elektronika, vai viņš būtu pilnībā nelasāms! Varbūt tā bija pieļaujams agrāk, kad diski bija 200mb vai 2gb lieli, bet realitāte ir tāda, ka tagad diski ir 200gb un 400gb lieli. KernelSummit jau 2001 gadā par to runāja, bet neizskatās, ka kaut kas būtu izdarīts.
Ko RAIDam vajadzēja darīt? Vajadzēja to beigto sektoru nolasīt no pārējiem diskiem (tas tiek izdarīts), bet nevis nofailot draivu, bet mēģināt to info ierakstīt kļūdainajā diskā vēlreiz. Ir ticams, ka tas izdosies, jo diska iekšas (firmware) jau būs paspējušas pārmapot slikto sektoru.
Ko es tikko kā redzēju. Lasīšanas kļūda uz /dev/sde1. (Sekundārā SATA kontroliera pirmais disks). Automātiski /dev/sde1 tiek atvienots no RAID (set disk failed).
Lai pārbaudītu ar badblocks, es izmetu to no masīva ar mdadm /dev/md0 --remove /dev/sde1
Palaižu badblocks skanu write režīmā (kas visus datus pārraksta, ar, piemēram 0xAA
un pēc tam nolasa, un pārbauda vai lasās pareizi). Divas reizes.
badblocks -p 2 -n -s -v /dev/sde1
(-p 2: izpildīt 2 reizes, -n: "destruktīvais" rakstīšanas režīms, -s: rādīt progresu, -v: verbose)
Neatrodas neviena kļūda (jāpiezīmē ka skans neaizņēma 10 vai 20 minūtes - tas ilga vairākas stundas). Īsāk sakot, pēc skana rezultātiem noskaidrojas, ka RAID nomarķējis disku par beigtu pilnīgi nepelnīti.
Liekam atpakaļ: mdadm /dev/md0 --add /dev/sde1
, un gaidam 2 h kamēr RAID labpatiks nosinhronizēties.
Lielajiem diskiem vispār ir tāds gļuks, ka viņi "nezin" vai sektors ir slikts, pirms tam nav mēģināts piekļūt (nolasīt).
Vispār, pirms disku likt pie sistēmas, būtu jēga to visu izdzīt cauri ar badblocks
ar write testu, bet tas ir baigi ilgi.
-
8 rakstair doma