Saya telah melakukan setengah jam membaca untuk bersiap-siap untuk mengkloning hard drive saya. Ini memiliki beberapa partisi, termasuk partisi Windows. Saya akan membeli hard drive eksternal yang sangat besar untuk cadangan. Saya ingin dapat menggunakan klon ini untuk mengembalikan seluruh drive jika terjadi kesalahan (saya akan melakukan beberapa OS re-shuffling). Saya ingin belajar bagaimana melakukan ini menggunakan dd, karena saya suka alat tingkat rendah yang tidak perlu menginstal apa pun.
Saya menemukan kode bermanfaat berikut dari forum ubuntu (dimasukkan dari root shell menggunakan live CD):
dd if=/dev/hda of=/dev/hdb & pid=$!
while kill -USR1 $pid; do sleep 1; done
(Saya tahu bahwa saya harus mengedit lokasi input dan output.) Namun saya punya dua pertanyaan. Yang pertama sangat noobie: perintah ini dibagi menjadi dua baris. Tentunya ketika saya menekan enter setelah tanda seru itu akan memulai proses?
Dua, di situs lain disarankan memasukkan ukuran blok. Seperti ini:
# dd if=/dev/hda conv=sync,noerror bs=64K of=/mnt/sda1/hda.img
Saya tidak tahu apa-apa tentang ukuran blok. Apakah 64K benar? Sepertinya ukuran blok saya adalah 512 byte dari berikut ini, output dari sudo fdisk -ul:
Disk /dev/sda: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xc3ffc3ff
Device Boot Start End Blocks Id System
/dev/sda1 * 63 143364059 71681998+ 7 HPFS/NTFS/exFAT
Partition 1 does not start on physical sector boundary.
/dev/sda2 976867328 1465147391 244140032 7 HPFS/NTFS/exFAT
/dev/sda3 143364094 976867327 416751617 5 Extended
Partition 3 does not start on physical sector boundary.
/dev/sda5 143364096 162895871 9765888 82 Linux swap / Solaris
/dev/sda6 162897920 205864959 21483520 83 Linux
/dev/sda7 205867008 976867327 385500160 83 Linux
Partition table entries are not in disk order
Disk /dev/mapper/cryptswap1: 10.0 GB, 10000269312 bytes
255 heads, 63 sectors/track, 1215 cylinders, total 19531776 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x433bb3a7
Disk /dev/mapper/cryptswap1 doesn't contain a valid partition table
Terima kasih.
dd if=/dev/hda of=hdb
? Berikut adalah jawaban yang menunjukkan beberapa detail termasuk runtime untuk 160 GB: askubuntu.com/questions/435694/…dd
mencakup sakelar progres seperti yang disebutkan di siniJawaban:
Kemajuan
Perintah yang Anda daftarkan
adalah dua baris yang bagus untuk mendapatkan kemajuan
dd
secara teratur. Saya menggunakan yang sangat mirip juga. Kelihatan bagus. Mungkin menemukannya di sini ?Blokir dengan
dd
: perataan dan kinerjaAnda dapat menambahkan ukuran blok tempat operasi berlangsung. Tidak masalah apa ukuran blok perangkat blok yang mendasarinya untuk menyelesaikan operasi dengan baik, tetapi untuk alasan kinerja Anda mungkin ingin memilih yang sesuai dengan kebutuhan Anda.
Pertama-tama, ada hal penyelarasan . Jika perangkat blok Anda beroperasi sebagai 512KiB (seperti flash drive lakukan), akan sangat disayangkan untuk dijalankan
dd
denganbs=512
(byte) karena ini akan menyebabkan 1024 write (!) Untuk setiap blok dari perspektif perangkat. Dalam prakteknya tidak akan seburuk ini karena penulisan buffer dan dilakukan sekaligus, tetapi selama sinkronisasi masih dapat meningkatkan jumlah penulisan banyak.Kemudian pertimbangkan juga penggunaan overhead CPU saat berhadapan dengan sejumlah kecil operasi kecil. Hanya lebih efisien untuk mengambil megabita sekaligus ketika menyalin data dalam jumlah besar.
Praktik terbaik saya adalah mulai dengan 1MB karena itu adalah kelipatan bagus dari sebagian besar pengaturan, termasuk ukuran garis RAID, ukuran LVM, dll. Di laptop saya dengan SSD saya cenderung melihat sedikit peningkatan menggunakan 10MB sebagai ukuran blok, sedangkan saya tidak melihatnya lagi di hard drive fisik saya.
Blok terakhir
Jangan khawatir tentang ukuran drive / volume yang bukan kelipatan dari ukuran blok. Blok terakhir
dd
akan disalin akan disesuaikan untuk mencocokkan bit data terakhir di dalamnya. Anda dapat melihat apakah blok terakhir memiliki ukuran yang berbeda dengan melihat output.The
+0
berarti bahwa itu adalah pertandingan yang tepat, sebuah+1
cara yang itu tidak. Bukan masalah besar.Lihat juga
sumber
# dd if=/dev/hda conv=sync,noerror bs=1MB of=/mnt/sda1/hda.img & pid=$!
while kill -USR1 $pid; do sleep 1; done
bs=1M
karena kekuatan 2, daripadabs=1MB
menjadi kekuatan 10. Tapi jalankan beberapa tolok ukur pada sistem Anda jika Anda dapat melihat apa yang terbaik.kill -USR1 $pid
sekarang memiliki laporan kemajuan yang tersedia dengan menambahkanstatus=progress
sakelarSeperti yang dikatakan orang lain, tidak ada ukuran blok yang benar secara universal; apa yang optimal untuk satu situasi atau satu perangkat keras mungkin sangat tidak efisien untuk yang lain. Juga, tergantung pada kesehatan disk, mungkin lebih baik menggunakan ukuran blok yang berbeda dari apa yang "optimal".
Satu hal yang cukup dapat diandalkan pada perangkat keras modern adalah ukuran blok default 512 byte cenderung hampir urutan besarnya lebih lambat daripada alternatif yang lebih optimal. Ketika ragu, saya menemukan bahwa 64K adalah standar modern yang cukup solid. Meskipun 64K biasanya bukan ukuran blok yang optimal, dalam pengalaman saya itu cenderung jauh lebih efisien daripada standar. 64K juga memiliki sejarah yang cukup solid untuk menjadi pemain yang andal: Anda dapat menemukan pesan dari milis Eug-Lug , sekitar tahun 2002, merekomendasikan ukuran blok 64K.
Untuk menentukan ukuran blok keluaran optimal, saya telah menulis skrip berikut yang menguji penulisan file uji 128M dengan dd pada berbagai ukuran blok yang berbeda, dari default 512 byte ke maksimum 64M. Berhati-hatilah, skrip ini menggunakan dd secara internal, jadi gunakan dengan hati-hati.
dd_obs_test.sh
:Lihat di GitHub
Saya hanya menguji skrip ini pada sistem Debian (Ubuntu) dan pada OSX Yosemite, jadi mungkin perlu beberapa penyesuaian untuk membuat pekerjaan pada rasa Unix lainnya.
Secara default perintah akan membuat file uji yang bernama
dd_obs_testfile
dalam direktori saat ini. Atau, Anda bisa memberikan lintasan ke file pengujian khusus dengan memberikan lintasan setelah nama skrip:Output dari skrip adalah daftar ukuran blok yang diuji dan laju transfer masing-masing seperti:
(Catatan: Unit tingkat transfer akan bervariasi berdasarkan OS)
Untuk menguji ukuran blok baca optimal, Anda dapat menggunakan lebih atau kurang proses yang sama, tetapi alih-alih membaca dari
/dev/zero
dan menulis ke disk, Anda akan membaca dari disk dan menulis ke/dev/null
. Script untuk melakukan ini mungkin terlihat seperti ini:dd_ibs_test.sh
:Lihat di GitHub
Perbedaan penting dalam hal ini adalah bahwa file uji adalah file yang ditulis oleh skrip. Jangan arahkan perintah ini ke file yang ada atau file yang ada akan ditimpa dengan data acak!
Untuk perangkat keras khusus saya, saya menemukan bahwa 128K adalah ukuran blok input paling optimal pada HDD dan 32K paling optimal pada SSD.
Meskipun jawaban ini mencakup sebagian besar temuan saya, saya perlu menentukan ukuran blok dd optimal cukup kali saya menulis posting blog tentang hal itu. Anda dapat menemukan lebih spesifik tentang tes yang saya lakukan di sana.
Posting StackOverflow ini mungkin juga berguna: dd: Bagaimana cara menghitung blocksize yang optimal?
sumber