Obsah

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 typu badblocks -w nebo 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:

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.

Zdroje