utwórz obraz dysku USB bez nieprzydzielonej partycji


13

Mam 8 GB napędu USB podłączonego do mojego systemu, który wygląda następująco:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Więc w zasadzie moja partycja FAT ma około 70 MB, partycja ext2 to około 740 MB, a reszta miejsca (~ 7 GB) jest nieprzydzielona. Teraz, gdy dodam dysk twardy USB przez:

dd if=/dev/sdb of=myimage.img bs=1M

plik wyjściowy (myimage.img) ma około 8 GB, co jest normalnym działaniem programu dd.

Pytanie: To, czego szukam, to sposób bezpośredniego klonowania dysku twardego USB bez nieprzydzielonego miejsca, aby plik wynikowy miał około 1 GB bez kompresji zamiast 8 GB. Pytam o to, ponieważ plik wyjściowy (myimage.img) jest używany przez program symulacyjny do uruchomienia obrazu. Symulator może obsługiwać pliki o wielkości 8 GB, ale nie chcę marnować miejsca na dysku.


1
Jest to nieco podobny problem z ciekawym rozwiązaniem: serverfault.com/q/281628/141604
tydzień

Odpowiedzi:


15

Jeśli dobrze rozumiem, chcesz utworzyć obraz od początku dysku do końca ostatniej partycji.

Parametr do ddtego służy to count=. Ostatnia partycja kończy się na 103, a liczba będzie musiała wynosić 1 dodatkowy (104), a rozmiar jednostki to 8225280 bajtów (zgodnie z danymi fdisk -lwyjściowymi). Aby po prostu zmodyfikować polecenie w ten sposób:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

Sugerowałbym jednak, abyś fdisk -u -l /dev/sdbzamiast tego pobiegł . Cylindry nie są już tak istotne w tym wieku, więc lepiej, jeśli zobaczysz liczenie sektora, aby uniknąć błędów zaokrąglania. Następnie będziesz musiał uruchomić:

dd if=/dev/sdb of=myimage.img count=...

gdzie liczba zostanie ustawiona na liczbę, którą otrzymałeś fdisk -u -lna końcu ostatniej partycji plus jeden , zamiast dawniej 104. Domyślny rozmiar bloku ddto 512 bajtów, co jest również jednostką, która fdisk -u -lbędzie używana na wyjściu.

Tabela partycji kopii zapasowej partycji GPT jest przechowywana na końcu dysku, ale ponieważ nie używasz GPT, nic ci nie będzie.


2

Musisz tylko powiedzieć dd, aby czytał tylko tę część dysku, którą jesteś zainteresowany. Parametrem, którego szukasz, jest count.

Więc weź swój rozmiar cylindra 8225,280 i pomnóż liczbę używanych cylindrów przez 103, a otrzymasz 847,203,840 bajtów. Ponieważ używasz bloku o wielkości jednego megabajta, przekonwertuj te bajty na megabajty, czyli 808.

Więc twoje polecenie jest dd if=... of=... bs=1M count=808

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.