Saya perlu menyalin satu disk ke disk lain. Saya mencoba dengan perintah di bawah ini dan dibutuhkan hampir satu hari untuk menyalin 1 TB disk dalam federo.
dd if=/dev/sda of=/dev/sdb
Saya telah mencoba hal yang sama pada sistem Unix (HP-UX) dengan perintah di bawah ini dan selesai dalam beberapa jam
dd if=/dev/sda of=/dev/rdsk
Apa alternatif yang bisa saya gunakan untuk menyalin dari disk ke disk lebih cepat?
cp /dev/sda /dev/sdb
atau (pv /dev/sda > /dev/sdb
untuk mendapatkan bilah kemajuan) akan jauh lebih cepat. Mengapa Anda gunakan didd
sini?dd
hanya akan berguna dengan hal-hal seperticonv=sync,noerror
untuk menangani disk dengan kesalahan, tetapi bahkan kemudian itu akan lebih masuk akal untuk menggunakan hal-hal sepertiddrescue
bukan (lihat jugapv
's-E
pilihan).cat
mungkin bahkan lebih cepat tetapi perbedaannya tidak terlalu dramatis (mungkin lebih besar untuk perangkat-ke-perangkat daripada file-ke-file seperti dalam percobaan saya).dd
perangkap # 1Jawaban:
dd
memiliki banyak opsi (aneh), lihat dd (1) .Anda harus secara eksplisit menyatakan ukuran buffer, jadi cobalah
IIRC, ukuran buffer default hanya 512 byte. Perintah di atas menetapkannya menjadi 16 megabyte. Anda dapat mencoba sesuatu yang lebih kecil (misalnya
bs=1M
) tetapi Anda harus menggunakan lebih dari standar (terutama pada perangkat keras disk baru-baru ini dengan sektor 4Kbytes, yaitu Format Lanjutan ). Saya secara naif merekomendasikan kekuatan dua yang setidaknya satu megabyte.Dengan ukuran buffer default 512 byte, saya kira (tapi saya bisa sangat salah) bahwa perangkat keras membutuhkan kernel untuk mentransfer 4K untuk setiap blok 512 byte.
Mengenai
rdsk
, halaman manual sd (4) mengatakan:Peningkatan ukuran buffer dd akan memberi Anda lebih banyak kinerja untuk operasi baca dan tulis. Sekarang semua disk memiliki buffer baca / tulis perangkat keras. Tetapi jika Anda akan meningkatkan ukuran buffer dd lebih dari buffer perangkat keras kinerjanya akan menurun karena dd akan membaca dari disk pertama ke buffer ketika disk kedua akan menulis semua dari buffer perangkat kerasnya sendiri. Anda perlu mengatur
bs
opsi perintah dd setiap kali nilai yang berbeda untuk perangkat yang berbeda.sumber
cat
sama baiknya (untuk transfer filesystem-ke-filesystem, block-to- files langsung dapat memiliki karakteristik kinerja yang berbeda). Namun perbedaannya tidak dramatis./dev/rdiskX
sebagai target saat melakukandd
.status=progress
yang akan mencetak seluruh kemajuan operasi.Bertahun-tahun yang lalu di Unix-land
dd
adalah cara yang diperlukan untuk menyalin perangkat blok. Itu telah dibawa maju sebagai ilmu pemujaan meskipun (pada sistem berbasis Linux, setidaknya)cat
hampir selalu lebih cepat daripadadd
.Namun, bahkan kembali dalam sejarah ukuran blok yang layak membantu mengurangi jumlah panggilan sistem (lambat), mengingat bahwa setiap panggilan sistem memicu operasi I / O. Ukuran blok default adalah 512 byte (satu sektor disk). Mengumpulkan beberapa blok disk bersama menjadi satu pembacaan adalah - dan - juga dapat diterima. Contoh ini menggunakan ukuran blok 32MB:
Pada sistem berbasis Linux saat ini, disk dapat disalin secara efisien dengan simpel
cat
(Seperti yang tercantum dalam komentar pada pertanyaan Anda
pv
dapat diganticat
dan akan memberi Anda indikasi kemajuan dan throughput.)sumber
Secara umum,
dd
dapat dihindari demi beberapa alternatif. Ada beberapa alasan bagus untuk menggunakan GNUddrescue
. Di Ubuntu, Anda dapat menginstalnya dengan:dan sederhana
ddrescue
digunakan. Perhatikan bahwa berbeda dari nama paket, executable tidak memiliki inisialg
.Menggunakannya sesederhana:
File log (dinamai apa pun yang Anda pilih) memungkinkan Anda menjeda / berhenti dan memulai ulang, tanpa mengulangi pekerjaan sebelumnya, yang berguna ketika melakukan klon besar atau pemulihan disk. Secara default, ini menampilkan progres, kecepatan penyalinan saat ini, kecepatan penyalinan rata-rata dan jumlah blok buruk yang ditemukan.
Menggunakan default yang masuk akal untuk ukuran blok, sehingga kecepatan salin selalu secepat perangkat dapat menangani, setidaknya dalam pengalaman saya (saya sudah mengkloning ratusan drive dengan itu, semua ukuran dan jenis).
Seringkali, drive yang mulai gagal memiliki masalah kecepatan seperti tambalan kelambatan sesekali, kecepatan rata-rata rendah, jeda panjang tiba-tiba (bad sector) atau reset penuh (kesalahan permukaan parah).
ddrescue
dapat membantu Anda mengidentifikasi semua hal di atas dan memulai kembali klon Anda (asalkan Anda menentukan file log) bahkan jika drive Anda mengatur ulang sendiri.sumber
Pertanyaan yang sangat bagus Antarmuka baku diimplementasikan pada beberapa sistem unix (tru64, hpux, solaris) tetapi tidak di linux. Antarmuka baku membuat transfer lebih cepat karena unix I / O dilewati. Antarmuka blok (
/dev/dsk
atau/dev/disk
) lebih lambat karena menggunakan sistem I / O unix. Untuk mempercepatdd
(gnu dd bisa) gunakanbs=30M
ataubs=20M
tergantung pada hw Anda. Jawaban singkatnya adalah: TIDAK, itu tidak diterapkan, setidaknya sejauh yang saya tahu. Saya menggunakan linux sejak dulu versi kernel 2.2 dan belum pernah melihatrdsk
digunakan pada unix.sumber