Prověření nového rotačního HDD před zálohováním dat
Vytvořeno: 12.3.2019
Poznámka k aktuálnosti: Tento článek vychází z praktické zkušenosti z roku 2019 a nemusí odpovídat dnešním verzím nástrojů ani běžné praxi.
Důležité: Tento postup je určený pro klasické rotační HDD. Na SSD a NVMe disky se destruktivní testy typubadblocks -wnebo přepis celého zařízení náhodnými daty běžně nehodí.
smartmontools a badblocks umožňují před nasazením nového rotačního disku udělat základní kontrolu stavu, dlouhé self-testy a případně i destruktivní zápisový test. Tady je dobový praktický postup, který jsem používal před tím, než jsem na nový HDD začal přesouvat zálohy.
Proč disk nejdřív testovat
Po koupi nového disku dává smysl nejdřív odložit kopírování dat a disk důkladně prověřit. V mém případě šlo o disk připojený k Cubie Board 2 s Armbianem, kde měl sloužit pro zálohy.
Předchozí 2TB disk mi odešel i s daty do křemíkového nebe — technicky vzato jsem přišel o data stará asi měsíc. Byl to druhý disk, který mi odešel do dvou let. Po pročtení mnoha příspěvků a statistik Backblaze jsem si potvrdil, že neexistuje spolehlivý disk jako takový — jediný způsob, jak snížit riziko, je záloha záloh. Jako nový disk jsem zvolil Seagate IronWolf 3,5„ 4TB. Dalším krokem bylo plánování softwarového RAIDu, ale tento postup je o přípravě nově koupeného disku před prvním použitím.
Po předchozí zkušenosti s odcházejícími disky jsem chtěl nový kus několik dní testovat ještě před tím, než na něj něco důležitého uložím.
S.M.A.R.T. testy
První krok byl S.M.A.R.T. self-test. Po koupi je rozumné začít třeba conveyance testem, který může odhalit poškození při přepravě:
smartctl --test=conveyance /dev/sda
Průběh a výsledky testů lze kontrolovat takto:
smartctl -l selftest /dev/sda
Pak následoval krátký a dlouhý test. Zkrácený test běžel pár minut, dlouhý test trval nějakou tu hodinku:
smartctl --test=short /dev/sda smartctl --test=long /dev/sda
Výsledky testů dopadly dobře, žádná chyba nebyla nalezena. Ukázka výpisu:
root@cubieboard2:/home/armbian# smartctl -l selftest /dev/sda smartctl 6.4 2014-10-07 r4002 [armv7l-linux-4.19.13-sunxi] (local build) Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Self-test routine in progress 00% 7 - # 2 Conveyance offline Completed without error 00% 0 - # 3 Short offline Completed without error 00% 0 -
Destruktivní kontrola vadných bloků
Dalším rozumným krokem před vytvořením souborového systému a přenesením dat je kontrola vadných bloků na disku přes badblocks v režimu čtení i zápisu. To je potřeba brát jako destruktivní operaci, která smaže obsah zařízení. Příkaz postupně zkouší tyto vzory bitů: 0xaa, 0x55, 0xff, 0x00.
badblocks -c 10240 -s -w -v /dev/sda
Pokud test dopadne dobře, výpis vypadá takto:
root@cubieboard2:/home/armbian# badblocks -c 10240 -s -w -v /dev/sda Checking for bad blocks in read-write mode From block 0 to 3907018583 Testing with pattern 0xaa: done Reading and comparing: done Testing with pattern 0x55: done Reading and comparing: done Testing with pattern 0xff: done Reading and comparing: done Testing with pattern 0x00: done Reading and comparing: done Pass completed, 0 bad blocks found. (0/0/0 errors)
Na pomalejším zařízení může taková kontrola trvat velmi dlouho. V mém případě na Cubieboardu 2 trvala zhruba 7 dní.
Jako poslední krok jsem tehdy disk ještě přepsal náhodnými daty a připravil se tak na šifrování. Vykonání tohoto příkazu zabralo něco kolem 30 hodin:
badblocks -c 10240 -s -w -t random -v /dev/sda
Problém s většími disky na 32bit systému
Na 32bitovém systému jsem narazil na problém při testování 8TB disku. badblocks skončil chybou o příliš velké hodnotě pro daný datový typ:
badblocks -c 10240 -s -w -v /dev/sdb badblocks: Hodnota je příliš velká pro daný datový typ invalid end block (7814026584): must be 32-bit value
Pomohlo zvětšení velikosti bloku:
badblocks -b 4096 -s -w -v /dev/sdb
Pro ověření geometrie disku se hodí:
fdisk -l /dev/sdb
Disk /dev/sdb: 7,28 TiB, 8001563222016 bytes, 15628053168 sectors Disk model: 002-2ZM188 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Pointa je v tom, že větší blok znamená menší počet adresovaných bloků, což obejde limit 32bitového adresování. Pro 8TB disk:
- Při velikosti bloku 512 bytů: 8 TB / 512 B = 16 000 000 000 bloků
- Při velikosti bloku 4096 bytů: 8 TB / 4096 B = 2 000 000 000 bloků
Menší čísla bloků jsou pak adresovatelná i v 32bitovém systému.
Praktická poznámka k SSD a NVMe
Tento postup je zaměřený na rotační disky. U SSD a NVMe dává větší smysl vycházet z jejich vlastních diagnostických nástrojů, S.M.A.R.T./NVMe health dat a zbytečně je nevystavovat dlouhým destruktivním zápisovým testům přes celý disk.