Mam obraz istniejącej partycji wygenerowany za pomocą dd if=/dev/sdXN of=image.bin
. Teraz chcę użyć tego obrazu jako podstawy maszyny wirtualnej. Wiem, jak przekonwertować obraz do formatu, którego może używać VirtualBox.
Problem polega na tym, że obraz „dysku” jest tak naprawdę tylko obrazem jednej partycji, a zatem nie zawiera MBR ani tablicy partycji. To bardzo utrudnia uruchomienie maszyny wirtualnej.
Czy istnieje prosty sposób, biorąc pod uwagę obraz partycji, stworzenie odpowiedniego obrazu dysku, w tym tablicy partycji?
źródło
Jestem pewien, że pierwotny problem został rozwiązany dawno temu, ale dla każdego z podobnym problemem:
Jednym ze sposobów uniknięcia kopiowania całego obrazu byłoby utworzenie obrazu w formacie .vmdk, który odnosi się do oddzielnych plików zakresu dla tabeli partycji i dla zawartości partycji.
Mam ten fragment kodu w pliku .vmdk z testu, który zrobiłem jakiś czas temu:
Oznacza to, że 63 sektory zaczynające się od offsetu 0 są odczytywane z surowego pliku „parttable.bin”, ale sektor 63 i wyższy pochodzą z zrzutu surowej partycji „partition-image.bin”. (Oczywiście zastąp wartość 63 rzeczywistym przesunięciem do pierwszej partycji, zwykle obecnie 2048).
Ostateczny wynik jest taki, że z poziomu VBoxa wygląda na to, że wstawiłeś tabelę partycji na przód obrazu partycji, bez konieczności długiej operacji kopiowania.
Podziel dysk na partycje z maszyny wirtualnej, a jeśli poprawne zostaną przesunięcia, zawartość obrazu partycji powinna być widoczna w nowo utworzonej partycji.
źródło
Ciekawy problem. Oto co bym zrobił:
Po wykonaniu tej czynności musisz zaktualizować moduł ładujący. Zakładając, że używasz GRUB-a, zamontuj nowo napisaną partycję, a następnie uruchom na niej chroot i uruchom
update-grub
(bądź ostrożny, może być konieczne dostosowanie jego plików konfiguracyjnych, zanim będzie działać poprawnie).Powodzenia!
źródło
Możesz zmienić rozmiar systemu plików w miejscu, z GParted.
Utwórz obraz testowy:
Nie używam resize2fs, ponieważ zmienia rozmiar pliku, zamiast pozostawiać wolne miejsce.
Darmowy 1 MB na starcie.
Na koniec utwórz tabelę partycji.
Ustaw pierwszy sektor na 2048 (2048 sektorów * 512 B / sektor = 1 MB), ostatni sektor jako domyślny (tj. Koniec obrazu).
źródło
Osobiście wolę dodawać za pomocą
dd
.Zakładam sektory 512-bajtowe tutaj. Sytuacja może dotyczyć sektorów o długości 2048 bajtów, więc po prostu zamień liczby i wykonaj obliczenia matematyczne.
W każdym przypadku używam na przykład pliku testowego 512 MB:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Komponowanie obrazu
Osobiście wolę dołączyć pierwszy MB (2048 sektorów) na jego początku:
dd if=testfs.img skip=2048 bs=512 of=full.img
Na koniec uruchom fdisk, aby utworzyć tablicę partycji (lub skopiuj własną), utworzyłem 1 partycję przy użyciu wartości domyślnych.
Weryfikacja
Aby to sprawdzić, utwórz partycje pętli i automatycznie wykryj:
sudo losetup -fP full.img
I uruchom
file
na wynikowym partycjonowanym sprzężeniu zwrotnym:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
GPT
Komponowanie obrazu
Ja osobiście wolę dołączyć pierwszy MB (2048 sektorów, ponieważ gdisk ustawi domyślnie na tę liczbę, ponieważ jest wyrównany 1 MB) na początku na początku MBR i 34 sektory na końcu (lub 2048 na pełny MB) na końcu GPT (sektor końcowy może być inny). Pominięcie końca GPT może spowodować utratę danych:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Na koniec uruchom gdisk, aby utworzyć tablicę partycji (lub skopiuj własną), utworzyłem 1 partycję przy użyciu wartości domyślnych.
Weryfikacja
Aby to sprawdzić, utwórz partycje pętli i automatycznie wykryj:
sudo losetup -fP full.img
I uruchom
file
na wynikowym partycjonowanym sprzężeniu zwrotnym:sudo file -s /dev/loop2p1 /dev/loop2p1: Linux rev 1.0 ext4 filesystem data, UUID=ae2945fd-54b5-486f-8dd0-9b18d6ae01b4 (extents) (large files) (huge files)
Ta metoda zapewnia brak zgadywania, zmiany rozmiaru lub ręcznego wyrównywania.źródło
sudo file -s /dev/loop11p1
, dostałem/dev/loop11p1: data
. Który wcześniej był systemem plików ext4. Wynikowy plik full.img jest mniejszy. Myślę, że masz odwrócone rozwiązanie.seek=2048
to polecenie dd if = testfs.img skip = 2048 bs = 512 of = full.img