GNU/Linux >> Znalost Linux >  >> Linux

Špatný příkaz dd na hlavním disku - Jak obnovit data?

Předpokládám, že tabulku oddílů a spouštěcí oddíl lze snadno znovu vytvořit, takže se zaměřím na oddíl ext4.

Rozložení souborového systému je poněkud závislé na možnostech použitých při jeho vytváření. Popíšu běžný případ. Zda se toto shoduje s vaším, můžete zjistit spuštěním dumpe2fs na zařízení (které doufejme nalezne všechna metadata nejvyšší úrovně v mezipaměti místo čtení z disku).

Normální velikost bloku pro souborové systémy ext4 je 4096 bajtů, takže jste ztratili 1024 bloků.

První, co bylo přepsáno, byl blok 0, primární superblok. To samo o sobě není problém, protože existují záložní superbloky. Poté je tabulka deskriptorů skupiny, která má také zálohy v rámci souborového systému.

Pak jsou tu blokové bitmapy a inode bitmapy. Tady se novinky začínají mírně zhoršovat. Pokud je některý z nich pod blokem 1024, což pravděpodobně je, ztratili jste informace o tom, které inody a bloky se používají. Tyto informace jsou nadbytečné a fsck je zrekonstruuje na základě toho, co najde při průchodu všemi adresáři a inody, pokud jsou neporušené.

Ale další věc je tabulka inodů a zde jste pravděpodobně ztratili spoustu inodů, včetně kořenového adresáře, žurnálu a dalších speciálních inodů. Bude hezké mít je zpět. Je zřejmé, že přinejmenším kořenový adresář je stále funkční, nebo téměř všechny příkazy, které se pokusíte spustit, by již selhaly.

Pokud spustíte dd if=/dev/nvme1n1p2 of=/some/external/device bs=4096 count=1024 nyní získáte záložní kopii všeho, co je aktuálně ve vaší mezipaměti, smíchané se špatnými daty pro bloky, které nejsou v mezipaměti. Poté po zavedení záchranného disku můžete udělat totéž dd obráceně, vrátit tato částečně dobrá data zpět na disk a přepsat všechny špatné věci, které tam teď jsou.

Poté můžete najít nástroje pro automatické obnovení (fsck , testdisk ) fungují dostatečně dobře. Pokud ne, máte mapu, kterou můžete použít k ručnímu obnovení. Pomocí seznamů "volných bloků" z dumpe2fs , víte, které bloky ignorovat.

Většina z toho, co jste ztratili, jsou pravděpodobně inody. Ve skutečnosti je docela pravděpodobné, že jste neměli žádný obsah souboru na prvních 4 MB disku. (Spustil jsem mkfs.ext4 s žádnými možnostmi na 1TB obrazovém souboru a první blok bez metadat se ukázal být blok 9249)

Každý inode, který se vám podaří obnovit, identifikuje datové bloky celého souboru. A tyto datové bloky mohou být umístěny po celém disku, ne nutně poblíž.

Den 2

Skládka zveřejněná na pastebin odhaluje skvělé zprávy:

Group 0: (Blocks 0-32767) csum 0x9569 [ITABLE_ZEROED]
  Primary superblock at 0, Group descriptors at 1-117
  Reserved GDT blocks at 118-1141
  Block bitmap at 1142 (+1142)
  Inode bitmap at 1158 (+1158)
  Inode table at 1174-1685 (+1174)
  21349 free blocks, 8177 free inodes, 2 directories, 8177 unused inodes
  Free blocks: 11419-32767
  Free inodes: 16-8192

Protože si myslíme, že byly přepsány pouze 4 MB na začátku souborového systému, musíme se starat pouze o bloky 0-1023. A rezervované bloky GDT jdou až do bloku 1141! Toto je druh poškození, který by měl být opraven jednoduchým e2fsck -b $backup_superblock_number (po restartu). Můžete to alespoň zkusit s -n abyste viděli, co si myslí.


Linux
  1. Jak obnovit smazané soubory v systému Linux pomocí nástroje pro obnovu dat Scalpel?

  2. Linux – Obnova dat po zkopírování souboru do blokovaného zařízení?

  3. Jak příkaz stat vypočítá bloky souboru?

  1. Jak používat Su Command v Linuxu

  2. Jak vytvořit zaváděcí USB disk pomocí příkazu dd

  3. Jak mohu použít DD k migraci dat ze starého disku na nový?

  1. Jak obnovit práci na pozadí z předchozího shellu?

  2. Jak obnovit data Xfs po Rm?

  3. Obnovit data z pevného disku Fat32?