Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?

Nazdar linuxáci,

ve vlákně vedle řeším průšvih, kdy mi výpadek elektřiny poškodil XFS. Už jste mi poradili jako to opravit. Před samotnou opravou by mělo být rozumné si ten poškozený disk nějak zazálohovat. Prosím o rady krok za krokem jak na to?

Moje představa by vypadala nějak takto:

  • Umím - Připojit do PC vedle HDD s poškozeným systémem ještě druhý HDD.
  • Umím - Na druhý HDD pomocí instalačního USB nainstalovat čistý nový systém.
  • Netuším jak, zřejmě se to dělá přes mount nebo fdisk - Po nabootování nového systému udělat z toho druhého disku ISO image.
  • Netuším jak, zřejmě se to dělá přes dd - Tenhle ISO image potom zkopírovat z původního HDD na ten nový HDD.
  • Netuším jak, prý se to dělá přes xfs_repair - Jakmile bude záloha dokončena, provést něco jako příkaz xfs_repair a doufat, že to jako noob nějak zmáknu.

Neřešil jste prosím v minulosti něco podobného? Nemáte někdo prosím nějaký ověřený návod, jak zařídit co potřebuji?

Nikdy jsem nic takového nedělal, potřeboval bych konkrétnější kuchařku, jak třeba najdu ten první disk? Že by pomocí "lsblk", ale jak poznám, který je ten nový a který ten starý :-D A zkrátka podtřebuji všechny takový věci, které se v teorii neřeší, ale v praxi je budu potřebovat. Na co si dát pozor apod. Už mám tip neprohodit cíl se zdrojem při kopírování původního disku s rozbitým XFS. :-)

Děkuji za záchranu, jakmile to dám do kupy, slibuji, že ihned přidám do zálohovacího procesu. Kdybych věděl, že XFS je takhle náročný na výpadky proudu, tak neváhám ani minutu. :-)


Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #1 kdy: 07. 02. 2020, 12:47:49 »
Takže:

1. Nedávno jsem použil na naklonování disku systemrescuecd. Dá se nabootovat a provozovat z flashky a má X a má gparted.
2. V počítači máš jen ten "poškozený" disk. Spusť gparted a podívej se na něj. Uvidíš, přesnou velikost a partitiony.
3. Pak tam připoj ještě ten nový, zase spusť gparted, teď tam uvidíš 2 disky. Dokážeš je rozeznat, nebo jsou úplně stejné?
4.a. Dokážeš je rozeznat, tak si zapiš, který je ten starý (např. /dev/sda) a který je ten nový (např. /dev/sdb).
4.b. Nedokážeš je rozeznat: Já bych postupoval úplně tupě - odpojil starý a připojil jen ten nový. Na něm bych si udělal v gparted jakoukoliv partitionu malé velikosti - jen na to, abych v gpartedu poznal, který je který. Teď už je rozeznat dokážeš. Znovu připoj ten starý disk. Tak si zapiš, který je ten starý (např. /dev/sda) a který je ten nový (např. /dev/sdb)
5. dd if=/dev/sda of=/dev/sdb
6. Čekej.
7. Teď máš na /dev/sdb přesnou kopii /dev/sda.

4.b.: Je to tupé, ale jednoduché. Předpokládám, že někdo poradí, jak se podívat na sériové číslo disku, a pak to půjde bez toho mrcasení s partitionou.

(Pozn: Určitě chápeš, že všechna ta připojení a odpojení při vypnutém počítači :-)

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #2 kdy: 07. 02. 2020, 14:12:23 »
Na klonovani disku se mi osvedcila clonezilla.

https://clonezilla.org/

Fiber

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #3 kdy: 07. 02. 2020, 18:03:33 »
Clonezilla je super. Používám pro hromadné klonování disků, lze klonovat i přes síť.

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #4 kdy: 07. 02. 2020, 18:54:51 »
Disk na Disk se zobrazenim prubehu(status=progress), vetsi nez vychozi velikost bloku(bs=1M), doplneni bloku nulama kdyz by pri cteni byl error(conf=sync)
Kód: [Vybrat]
dd if=/dev/sdX of=/dev/sdY status=progress bs=1M conv=sync
Disk do Image je to same, ale of=/adresar/kam/image.dd

K tomu co psal "Petr Blahos" je potreba si uvedomit, ze pri pripojeni/odpojeni disku se v zavisosti na poradi sata portu muze oznaceni
disku menit, tedy to ze v jednom startu vidim ze Disk1 ma oznaceni sda a pripojim Disk2 NEznamena ze Disk1 bude stale sda, tedy to zjisteni ktere sdX je dany disk je potreba delat pred kopirovanim v tom danem nastartovanem Live sezeni...

pomoci lsblk zobrazeni i vyrobce, modelu, serial
Kód: [Vybrat]
lsblk -o NAME,SIZE,VENDOR,MODEL,SERIAL,TYPE
EDIT: Jinak Clonezilla samozrejme je take (ktere roky pouzivam) reseni, ale v tomto pripade jen pro Disk na Disk, protoze Disk 2 Image by nebyl pripojitelny pro potreby zkousky oprav filesystemu, a i ten Disk na Disk by bylo potreba vybrat v Clonezilla NEvychozi rezim kopirovani DD, protoze vychozi partclone by mohl narazit na to ze kopiruje nesurove jen pouzite misto a to v pripade naboreneho filesystemu neni ok...
« Poslední změna: 07. 02. 2020, 18:57:17 od k3dAR »


Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #5 kdy: 08. 02. 2020, 07:39:28 »
Pro kopírování disků v nejistém stavu se dá použít ddrescue. Lepší, než si pamatovat řadu parametrů dd, a snaží se u vadných sektorů trochu víc (opakuje s menší velikosti bloku).

leten

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #6 kdy: 08. 02. 2020, 11:04:44 »
Na klonování celého disku jde použít i příkaz cat /dev/sda > /dev/sdb

Nevýhoda je, že není vidět, kolik procent je hotovo.

Přesný syntax z hlavy nevím, ale google určitě pomůže  :)

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #7 kdy: 08. 02. 2020, 15:47:30 »
Nevýhoda je, že není vidět, kolik procent je hotovo.
Stejně jako u všech ostatních příkazů pracujícími se soubory to je vidět v /proc. Nejdřív ls -l /proc/pid/fd zjistí, který file descriptor to je, a pak je v /proc/pid/fdinfo/číslo vidět aktuální pozice.

Protože je opruz tohle dělat ručně, existuje program progress, který to udělá automaticky a zobrazí průběhy všech programů (cat, cp, mv, gzip, rsync…), ke kterým má aktuální uživatel přístup. Doporučuji nastavit si desktopové prostředí tak, aby se spouštěl periodicky, a pokud se něco objeví, ukázal se vám někde na obrazovce nenápadný progress bar.

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #8 kdy: 10. 02. 2020, 09:03:19 »
Na klonování celého disku jde použít i příkaz cat /dev/sda > /dev/sdb

Nevýhoda je, že není vidět, kolik procent je hotovo.

Stačí místo cat použít pv – to je jako cat, jen s ukazatelem průběhu (a pokud zná celkovou velikost, což v tomto případě zná, tak i procent a zbývajícího času).

Kód: [Vybrat]
pv /dev/sda > /dev/sdb

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #9 kdy: 10. 02. 2020, 10:13:13 »
3. Pak tam připoj ještě ten nový, zase spusť gparted, teď tam uvidíš 2 disky. Dokážeš je rozeznat, nebo jsou úplně stejné?
4.a. Dokážeš je rozeznat, tak si zapiš, který je ten starý (např. /dev/sda) a který je ten nový (např. /dev/sdb).
4.b. Nedokážeš je rozeznat: Já bych postupoval úplně tupě - odpojil starý a připojil jen ten nový. Na něm bych si udělal v gparted jakoukoliv partitionu malé velikosti - jen na to, abych v gpartedu poznal, který je který. Teď už je rozeznat dokážeš. Znovu připoj ten starý disk. Tak si zapiš, který je ten starý (např. /dev/sda) a který je ten nový (např. /dev/sdb)

[...]

(Pozn: Určitě chápeš, že všechna ta připojení a odpojení při vypnutém počítači :-)
Tohle je zbyečně složitý a zdlouhavý postup (kvůli těm rebootům). Daleko snazší je:

Kód: [Vybrat]
smartctl -a /dev/sda
smartctl -a /dev/sdb
- zajímá tě tohle:

Citace
=== START OF INFORMATION SECTION ===
Device Model:     MB1000GCEEK
Serial Number:    WDAU36035460
Buď jsou ty disky od jiného výrobce, pak stačí Device Model, nebo jsou stejné a pak se rozliší podle Serial Number. Oboje bývá natištěné na nálepce, takže je jde rozlišit i fyzicky.

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #10 kdy: 12. 02. 2020, 18:10:18 »
Disk na Disk se zobrazenim prubehu(status=progress), vetsi nez vychozi velikost bloku(bs=1M), doplneni bloku nulama kdyz by pri cteni byl error(conf=sync)

Je nejaký rozdiel medzi týmto a použitím  ddrescue ? Mám  disk, čo  neskopírujrm ani ddrescue, toto by ale mohlo pomôcť

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #11 kdy: 12. 02. 2020, 18:28:09 »
Je nejaký rozdiel medzi týmto a použitím  ddrescue ? Mám  disk, čo  neskopírujrm ani ddrescue, toto by ale mohlo pomôcť
Především tam k3dARovi chybi "noerror", bez něj to nefunguje tak, jak píše (viz https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html)

"neskopírujrm ani ddrescue" je tak vágní popis problému, že ti asi těžko někdo řekne, jestli ho ddrescue umí řešit nebo ne. Zkopírovat ti to nemusí jít třeba proto, že disk nemáš k počítači připojený :) Ne, tenhle problém ani ddrescue nevyřeší :)

Re:Jak zkopírovat celý disk na jiný disk (např. pomocí dd)?
« Odpověď #12 kdy: 12. 02. 2020, 20:09:54 »
Disk na Disk se zobrazenim prubehu(status=progress), vetsi nez vychozi velikost bloku(bs=1M), doplneni bloku nulama kdyz by pri cteni byl error(conf=sync)

Je nejaký rozdiel medzi týmto a použitím  ddrescue ? Mám  disk, čo  neskopírujrm ani ddrescue, toto by ale mohlo pomôcť
Když ten disk nezkopíruje ddrescue, tak nejspíš ani dd s jakýmikoliv parametry.
Může na tom disku být natolik poškozené místo, že při přístupu na ně disk přestane komunikovat - to je pak špatné a řešení (pokud vůbec existuje) není triviální.