Wprowadzenie
W przypadku dysku z partycjami PC (który znajduje się w większości pamięci USB) moduł ładujący składa się z niewielkiej części na samym początku dysku (moduł ładujący etap 1, w sektorze rozruchowym dysku) oraz większa część gdzie indziej (bootloader etapu 2, w pliku). Dane etapu 1 zawierają fizyczną lokalizację etapu 2. Jeśli skopiujesz całe urządzenie (z czym próbowałeś dd
), część etapu 1 znajduje się w tym samym miejscu fizycznym i drążek działa, ale nowy drążek musi być co najmniej tak samo duży jak oryginał. Jeśli odtwarzasz partycje i kopiujesz pliki, tracisz etap 1, ponieważ nie jest to plik.
Myślę (ale nie sprawdziłem), że etap 2 znajduje się na pierwszej partycji (FAT32). Jeśli tak, możesz skopiować tę partycję hurtowo, a także skopiować sektor rozruchowy, a następnie edytować tabelę partycji, aby druga partycja zajęła dokładnie tyle miejsca, ile pozostało, i skopiować pliki na drugiej partycji. Równie dobrze możesz zachować surowy obraz sektora rozruchowego i pierwszej partycji w pliku na dysku twardym (ale możesz także sklonować je z pamięci USB).
Tworzenie klona o innym rozmiarze
Poniżej wywołam urządzenie zawierające oryginalny kij /dev/sdb
i urządzenie zawierające klon /dev/sdc
; w razie potrzeby zastępuj nazwy. W razie potrzeby utwórz punkty montowania. Zakładam, że partycja FAT32 (na początku dysku) ma numer 1, a partycja ext3 ma numer 2; w razie potrzeby zastąp inne liczby.
Pierwsza część, w przypadku klonowania z patyka:
head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1
Pierwsza część, w przypadku klonowania z plików graficznych:
cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1
Wywołanie to partprobe
jest potrzebne, aby jądro ponownie załadowało tablicę partycji z dysku (znajduje się w sektorze rozruchowym, a pierwsze polecenie w obu powyższych scenariuszach modyfikuje sektor rozruchowy). Jeśli go pominiesz, albo dostaniesz błędy, albo jądro po cichu zapisze śmieci na patyku.
Aby utworzyć pliki obrazów:
head -c 512 </dev/sdb >boot_sector.img
cat /dev/sdb1 >first_partition.img
Teraz, kiedy masz sektor rozruchowy i pierwszą partycję, musisz ponownie edytować tabelę partycji, aby zmienić rozmiar drugiej partycji. Możesz to zrobić automatycznie, podając odpowiednie dane wejściowe fdisk
. Uwaga, jest to bardzo podatne na błędy i nie przetestowałem tego. Jeśli nie czujesz się całkowicie komfortowo z tą częścią, zrób to ręcznie.
sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2 # delete partition 2
n p 2 # new primary partition 2...
_ _ # ... using all available space
w q # write and quit
EOF
Na koniec ponownie załaduj tablicę partycji, utwórz system plików ext3 i skopiuj tam pliki.
partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2
Uproszczona metoda tworzenia większego klonu
Jeśli wolisz, możesz zapisać obraz całego kija. Będziesz mógł użyć tego obrazu bezpośrednio na dowolnym drążku, który jest co najmniej tak duży: po prostu skopiuj ten obraz na nowy patyk za pomocą cat <whole.img >/dev/sdc
, a następnie uruchom partprobe /dev/sdc
(lub odłącz patyk i włóż go z powrotem), aby ponownie odczytać tablicę partycji.
Następnie, jeśli chcesz, możesz powiększyć klon. W tej kolejności:
- Powiększ partycję. Niestety nie wiem, jak to zrobić w prosty sposób.
parted
możesz to zrobić za pomocą move
polecenia (nie resize
, który zmienia rozmiar systemu plików), ale musisz znaleźć właściwe argumenty - przełącz się na sektory ( unit s
), aby uniknąć błędów zaokrąglania.
- Powiększ system plików. Ta część jest łatwa: wystarczy uruchomić,
resize2fs /dev/sdc2
aby system plików używał całego rozmiaru partycji.
Jeśli zaczynasz od większego drążka niż to konieczne, możesz go zmniejszyć, wykonując powyższe kroki w odwrotnej kolejności (najpierw zmniejsz system plików za pomocą resize2fs
, a następnie zmniejsz partycję za pomocą parted
).
Alternatywnie możesz najpierw skopiować patyk do pliku obrazu, a następnie pracować nad tym plikiem obrazu. Aby uzyskać dostęp do partycji, użyj urządzenia pętlowego , w szczególności kojarząc część pliku z dyskiem . Oto szkic kroków, jeśli chcesz zmniejszyć obraz (ostrzeżenie, nieprzetestowane, postępuj ostrożnie i dokładnie sprawdź matematykę).
fdisk -lu whole.img # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $ # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k