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.
Odpowiedzi:
Jeśli dobrze rozumiem, chcesz utworzyć obraz od początku dysku do końca ostatniej partycji.
Parametr do
dd
tego służy tocount=
. 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 danymifdisk -l
wyjściowymi). Aby po prostu zmodyfikować polecenie w ten sposób:Sugerowałbym jednak, abyś
fdisk -u -l /dev/sdb
zamiast 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ć:gdzie liczba zostanie ustawiona na liczbę, którą otrzymałeś
fdisk -u -l
na końcu ostatniej partycji plus jeden , zamiast dawniej 104. Domyślny rozmiar blokudd
to 512 bajtów, co jest również jednostką, którafdisk -u -l
bę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.
źródło
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
źródło