Saya memiliki gambar partisi yang ada dihasilkan dd if=/dev/sdXN of=image.bin
. Sekarang saya ingin menggunakan gambar ini sebagai dasar untuk mesin virtual. Saya tahu cara mengubah gambar menjadi format yang dapat digunakan VirtualBox.
Masalahnya adalah bahwa gambar "disk" benar-benar hanya gambar dari satu partisi dan karenanya tidak mengandung MBR atau tabel partisi. Ini membuatnya sangat sulit untuk mem-boot VM.
Apakah ada cara sederhana, diberikan gambar partisi, untuk membuat image disk yang tepat, termasuk tabel partisi?
sumber
Saya yakin masalah aslinya sudah dipecahkan sejak lama, tetapi bagi siapa pun yang memiliki masalah serupa:
Salah satu cara untuk menghindari penyalinan seluruh gambar adalah dengan membuat gambar berformat .vmdk yang merujuk ke file tingkat terpisah untuk tabel partisi dan untuk konten partisi.
Saya memiliki potongan ini di dalam file .vmdk dari tes yang saya lakukan beberapa waktu lalu:
Ini berarti bahwa 63 sektor mulai dari offset 0 dibaca dari file mentah "parttable.bin", tetapi sektor 63 dan ke atas berasal dari dump partisi mentah "partisi-image.bin". (Tentu saja, ganti 63 dengan offset aktual ke partisi pertama, biasanya 2048 hari ini).
Hasil akhirnya adalah bahwa, dari dalam VBox, sepertinya Anda telah menambahkan tabel partisi ke depan gambar partisi, tanpa harus melakukan operasi penyalinan yang panjang.
Partisi drive dari dalam VM dan, jika Anda mendapatkan offset Anda dengan benar, Anda akan melihat konten gambar partisi Anda di dalam partisi yang baru dibuat.
sumber
Masalah menarik. Inilah yang akan saya lakukan:
Setelah ini selesai, Anda harus memperbarui boot loader Anda. Dengan asumsi Anda menggunakan GRUB, pasang partisi yang baru ditulis lalu chroot ke dalamnya dan jalankan
update-grub
(hati-hati, Anda mungkin perlu menyesuaikan file konfigurasi sebelum itu akan berfungsi dengan benar).Semoga berhasil!
sumber
Anda dapat mengubah ukuran sistem file di tempat, dengan GParted.
Buat gambar uji:
Saya tidak menggunakan resize2fs, karena mengubah ukuran file, daripada meninggalkan ruang kosong.
Gratis 1 MB di awal.
Akhirnya, buat tabel partisi.
Atur sektor pertama ke 2048 (2048 sektor * 512 B / sektor = 1MB), sektor terakhir default (yaitu, ujung gambar).
sumber
Saya pribadi lebih suka menambahkan menggunakan
dd
.Saya mengasumsikan sektor 512-byte di sini. Mungkin ada kasus untuk sektor 2048-byte, jadi ganti saja angka-angkanya dan lakukan perhitungan.
Dalam setiap kasus saya menggunakan file uji 512MB misalnya:
dd if=/dev/zero of=testfs.img bs=512 count=1M mkfs.ext4 testfs.img
MBR
Menyusun gambar
Saya pribadi lebih suka menambahkan MB pertama (2048 sektor) ke awalnya:
dd if=testfs.img skip=2048 bs=512 of=full.img
Akhirnya jalankan fdisk untuk membuat tabel partisi (atau salin sendiri), saya membuat 1 partisi menggunakan nilai default.
Memverifikasi
Untuk memverifikasi, buat partisi lingkaran dan deteksi otomatis:
sudo losetup -fP full.img
Dan jalankan
file
pada perangkat loopback yang dipartisi yang dihasilkan: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
Menyusun gambar
Saya pribadi lebih suka menambahkan MB pertama (2048 sektor, karena gdisk akan default ke nomor ini karena 1 MB disejajarkan) ke awal untuk MBR awal dan 34 sektor ke ujungnya (atau 2048 untuk MB penuh) untuk akhir GPT (sektor akhir mungkin berbeda). Mengabaikan GPT akhir mungkin kehilangan data Anda:
dd if=testfs.img skip=2048 bs=512 of=full.img dd if=/dev/zero seek=1050624 bs=512 of=full.img count=34
Akhirnya jalankan gdisk untuk membuat tabel partisi (atau salin sendiri), saya membuat 1 partisi menggunakan nilai default.
Memverifikasi
Untuk memverifikasi, buat partisi lingkaran dan deteksi otomatis:
sudo losetup -fP full.img
Dan jalankan
file
pada perangkat loopback yang dipartisi yang dihasilkan: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)
Metode ini memastikan tidak ada menebak, mengubah ukuran atau menyelaraskan secara manual.sumber
sudo file -s /dev/loop11p1
saya mendapat/dev/loop11p1: data
. Yang sebelumnya adalah sistem file ext4. Dan full.img yang dihasilkan lebih kecil. Saya pikir Anda punya solusinya terbalik.seek=2048
dalam perintah ini dd jika = testfs.img lewati = 2048 bs = 512 of = full.img