Klonowanie rozruchowej pamięci USB na pamięć różnej wielkości

11

SPRZĘT: 2 dyski flash USB 8 GB
DISTRO: trwałe 9 Xfce Live Cd

Jeden dysk flash USB ma dwie partycje:
1) FAT32
700 MB casper-rwpartycja Mint 9 2) ext3 7,3 GB partycja

CEL:
Chcę zrobić duplikat tego dysku flash USB, ponieważ nie chcę przechodzić przez czas ponownej instalacji i konfiguracji od zera.

DOŚWIADCZENIE:
1) Odkryłem, że ddto nie działa w tym zadaniu, ponieważ jeśli jeden z moich dysków flash ma nawet 1 MB różnej wielkości, a czasami tak jest, kopia jest uszkodzona.

2) Przekonałem się, że użycie gpartedi sformatowanie drugiego dysku tak samo jak pierwszego, a następnie rsyncosobne skonfigurowanie każdej partycji nie działa, ponieważ z jakiegoś powodu niektóre pliki nie są kopiowane, a dysk nie uruchamia się.

Chcę zachować mój kij roboczy i po prostu zrobić jego kopię i skonfigurować drążki dla moich przyjaciół. W ten sposób, jeśli przejdę do kolejnego kija, zawsze będę trzymać mój kij bazowy po prostu czekając.

Joshua Robison
źródło
jakiego bootloadera używasz (syslinux?). Zastanów się nad usunięciem tego postu ze swojego postu, ponieważ nie doda ono żadnej wartości Twojemu pytaniu.
Mat.
Użyłem instalatora usb mint na żywo, więc wszystko było automatyczne. Mam nadzieję, że proces klonowania pozwoli uniknąć pracy z programami ładującymi i skopiuje moją obecną konfigurację programu ładującego
Joshua Robison,

Odpowiedzi:

6

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/sdbi 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 partprobejest 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:

  1. Powiększ partycję. Niestety nie wiem, jak to zrobić w prosty sposób. partedmożesz to zrobić za pomocą movepolecenia (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.
  2. Powiększ system plików. Ta część jest łatwa: wystarczy uruchomić, resize2fs /dev/sdc2aby 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
Gilles „SO- przestań być zły”
źródło
hmm Czy nie mogę po prostu użyć programu head, aby po prostu skopiować pierwsze 300 MB drugiej partycji do pliku IMG? Czy nie odetnie wszystkich pustych spacji / pustych bloków na końcu pliku?
Joshua Robison
1
@Joshua: Nie, ponieważ nie ma powodu, dla którego wszystkie dane pliku byłyby w pierwszych 300 MB, a nawet gdyby tak było, nie można po prostu wziąć udziału w takim systemie plików. Musisz utworzyć prawidłowy system plików o odpowiednim rozmiarze. Musisz także mieć partycję o odpowiednim rozmiarze; rozmiar partycji jest przechowywany w sektorze rozruchowym. Jeśli wolisz zacząć od obrazu o minimalnym rozmiarze i powiększyć go w razie potrzeby, dodałem sposób, aby to zrobić w mojej odpowiedzi.
Gilles „SO- przestań być zły”
hmm Próbowałem wcześniej skopiować pliki, ale z jakiegoś powodu wszystko nie zostało skopiowane. Próbowałem też rsync z sudo. i myślę, że spróbowałem su roota i to też zrobiłem ... To po prostu nie działa dla mnie. Jestem pewien, że dyski nie zostały zamontowane ... tak czy inaczej. Postanowiłem zmniejszyć dysk w gparted, a następnie zrobić z niego pliki img, a następnie przywrócić je na mniejszy dysk. Kurczenie wstępne w gparted było jedynym prostym rozwiązaniem, jakie mogłem znaleźć. Dziękuję za pomoc.
Joshua Robison
Twoja odpowiedź jest prawdopodobnie poprawna i najprawdopodobniej zrobi to, o co proszę. To dla mnie zbyt skomplikowane. Więc poszedłem z metodą dzielenia wstępnego.
Joshua Robison
czy w tej linii jest literówka head -c 512 </dev/sdb >/bev/sdc?
Antonio
3

~ $: sudo apt-get install gddrescue ddrescue

~ $: ddrescue / dev / sda / dev / sdb -v

;

Składnia: narzędzie / source / drive / destination / drive --verbose

Komentarz: pokazuje postępy i sprawdzanie błędów, abyś wiedział, czy jest to do przyjęcia lub gdzieś się rozłącza. Możesz także dodać b = bloki o dowolnym rozmiarze. „gddrescue” to oparta na GUI wersja „ddrescue”, ale używam tylko ddrescue, jak napisano powyżej, ponieważ działa bez problemu.

SierraJuliet
źródło
2
Zauważ, że właściwym formatem jest ddrescue -v /dev/sda /dev/sdb(opcje są na pierwszym miejscu przed nazwami urządzeń / plików). Dziękujemy za wskazanie tego narzędzia! Znacznie łatwiejsze niż używanie dd!
xmnboy,
0

Niedawno sklonowałem moją zaszyfrowaną trwałość Kali na żywo z 16 GB na 64 GB 3.0 USB. Mój system operacyjny to Windows 10 pro. Nie próbowałem klonować przy użyciu żadnej dystrybucji Linuksa, jestem pewien, że powyższe odpowiedzi są potrzebne, ale dla wszystkich użytkowników systemu Windows; Użyłem asystenta partycji dyskowej AOMEI. Bardzo prosty w użyciu, użyłem go do partycjonowania mojego dysku SSD, aby pasował do Ubuntu, ale dygresuję.

Musiałem się upewnić, że klonowane urządzenie USB zostało już sformatowane do rozruchu na żywo. Podłączono zarówno USB, jak i po prostu kliknięto prawym przyciskiem myszy napęd 8 GB; kliknięty, copya następnie wybrany dysk 64 GB, zapyta cię o kilka rzeczy, takich jak „czy jesteś pewien, że to właściwy dysk, wszystko zostanie wymazane” cały ten jazz. Po prostu przeczytaj to i upewnij się, że wszystko jest w porządku, naprawdę nie musisz wiele robić.

Poczekaj na zakończenie procesu i wszystko gotowe. Testowany powiedział, że USB i wszystko działało!

Odkryłem, że jest to dla mnie najłatwiejszy sposób, klonowanie dystrybucji na żywo z USB na USB.

Jestem tu nowy
źródło