Untuk referensi di masa mendatang, inilah cara saya akhirnya melanjutkan, dengan beberapa komentar tentang berbagai masalah atau kendala yang dihadapi:
1. Boot mesin dengan sistem live Linux
Langkah pertama adalah mem-boot mesin yang berisi disk ke image, menggunakan sistem live Linux.
CATATAN:Ide pertama saya adalah menggunakan disk Ubuntu Live USB, tetapi mesin tidak mendukung booting dari USB, jadi saya merasa lebih mudah menggunakan Knoppix live CD lama .
2. Gambar disk menggunakan dd
dan menyalurkan data melalui ssh
Kemudian, saya menyalin semua konten disk ke gambar file di server lokal saya menggunakan dd
dan menyalurkan data melalui ssh
:
$ dd if=/dev/hdX bs=4k conv=noerror,sinkronisasi | ssh -c blowfish [email protected] 'dd of=myfile.dd'
Beberapa komentar di sini:metode ini akan membaca semua isi disk, sehingga bisa memakan waktu sangat lama (butuh waktu 5 jam untuk disk 80Gb). Hambatannya bukanlah jaringan, tetapi sebenarnya kecepatan membaca disk. Sebelum meluncurkan salinan, saya menyarankan untuk memeriksa parameter BIOS/disk/sistem untuk memastikan bahwa disk dan motherboard bekerja pada kecepatan setinggi mungkin (ini dapat diperiksa menggunakan perintah hdparm -i
dan dengan menjalankan pengujian dengan hdparm -Tt /dev/hdX
).
CATATAN:dd
tidak menampilkan kemajuan operasi, tetapi kami dapat memaksanya untuk melakukannya dengan mengirimkan USR1 sinyal ke dd
memproses PID dari terminal lain:
$ kill -USR1 PIDofdd
Catatan:Versi dd
yang lebih baru mendukung status=LEVEL
opsi (man dd
)
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
the final transfer statistics, 'progress' shows periodic transfer statistics
3. Dapatkan kembali ruang yang tidak terpakai
Pada titik ini, mesin sumber tidak lagi diperlukan dan kami akan bekerja secara eksklusif di server tujuan (menjalankan Linux juga). VirtualBox akan digunakan untuk mengonversi image disk mentah ke format VHD, tetapi sebelum melakukannya, kita dapat menghapus blok yang tidak terpakai, sehingga VirtualBox tidak mengalokasikan ruang untuk blok tersebut di file akhir.
Untuk melakukannya, saya memasang gambar sebagai perangkat loopback:
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
CATATAN:Offset yang menunjukkan awal partisi di dalam disk image dapat diperoleh dengan menggunakan parted
pada file gambar:
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
NOTE2:Driver NTFS kernel Linux default menyediakan akses read-only, sehingga perlu untuk menginstal dan menggunakan userspace ntfs-3g
driver atau menulis ke disk akan menimbulkan kesalahan!
4. Buat gambar VHD menggunakan VBoxManage
Pada titik ini, kita dapat menggunakan utilitas VirtualBox untuk mengonversi gambar mentah menjadi file VHD:
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Saya mencoba melakukan hal yang persis sama dengan OP (sambil menyelamatkan instalasi Windows) dan akhirnya membuat alat baru untuk itu, ntfsclone2vhd
.
Anda kemudian hanya akan melakukan sesuatu seperti ini:
ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Salah satu pendekatannya adalah dengan menggunakan beberapa teknologi praktis:VirtualBox, dan ntfsprogs
paket.
Versi terbaru dari VirtualBox memungkinkan Anda membuat file hard disk VHD, sedangkan ntfsprogs
menyediakan ntfsclone
kegunaan. Seperti namanya, ntfsclone
mengkloning sistem file NTFS, dan saya yakin ini dilakukan pada tingkat sistem file, melewati blok disk yang tidak terpakai.
Jadi, untuk memulai, buat VM baru di VirtualBox, dan sediakan drive file VHD baru yang kosong untuknya. Drive VHD hanya perlu sebesar ukuran data yang digunakan pada drive fisik yang ingin Anda tiru (sebenarnya, buatlah sedikit lebih besar, untuk memberikan ruang gerak).
Selanjutnya, cari live CD Linux yang berisi ntfsprogs
paket, serta openssh-server
. Saya suka System Rescue CD untuk ini, tetapi hampir semua live CD berbasis Debian atau Ubuntu juga bisa digunakan.
Boot VM VirtualBox dengan live CD Linux, dan mulai sshd
dalam VM sehingga Anda dapat menjalankan perintah dari jarak jauh. Partisi drive VHD kosong dengan tepat, menggunakan alat pemartisi apa pun yang Anda suka (saya suka fdisk
lama , tapi saya agak jadul).
Dengan salinan live CD Linux lainnya, boot mesin yang berisi disk fisik yang ingin Anda tiru. Saya berasumsi bahwa VM VirtualBox dan mesin ini dapat diakses satu sama lain melalui jaringan. Di mesin ini, jalankan perintah berikut (semua dalam satu baris):
ntfsclone --save-image -o - /dev/sdXX |
ssh [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'
di mana:
/dev/sdXX
adalah nama perangkat (pada mesin lokal) dari drive fisik yang ingin Anda tiru, dan/dev/sdYY
adalah nama perangkat (dalam VM) dari drive tujuan VHD.
Penjelasan:ntfsclone
yang pertama perintah dalam pipa mengekstrak gambar sistem file NTFS sumber dan mengirimkannya melalui terowongan ssh, sedangkan ntfsclone
kedua perintah menerima image dan mengembalikannya ke drive VHD.
Setelah operasi selesai, file VHD harus berisi salinan persis file-untuk-file dari disk fisik asli (kecuali kesalahan perangkat keras apa pun, seperti bad sector, yang dapat menyebabkan proses dibatalkan sebelum waktunya).
Satu hal terakhir yang mungkin ingin Anda lakukan adalah menjalankan chkdsk
Windows pada drive VHD, hanya untuk memastikan kloning tidak menimbulkan masalah (seharusnya tidak, tapi hei, saya agak paranoid tentang hal ini).