Meskipun pada awalnya "tantangan" yang diusulkan mungkin tampak sulit, tidak layak atau terdengar naif seperti yang dikomentari oleh beberapa orang, itu tidak. Gagasan utama di balik menggunakan dd untuk bermigrasi dari disk yang lebih besar ke yang lebih kecil baik-baik saja dan memiliki manfaat untuk memigrasi data. Tentu saja, memiliki ruang kosong yang cukup sehingga data yang ditempati sesuai dengan disk tujuan adalah persyaratan yang diperlukan.
Idenya adalah untuk berpikir dalam melakukan setiap partisi secara individual dan bukan seluruh disk sekaligus seperti yang awalnya diusulkan. Bahkan lebih banyak yang dapat dicapai: Partisi yang akan terpotong juga dapat dimigrasi dengan aman dengan sedikit bantuan alat bantu ukuran ulang sistem file. Memang, migrasi semacam itu menarik untuk mempertahankan matadata filesystem dan atribut file diperluas yang tidak dapat dengan mudah disalin dengan alat-alat seperti cp, rsync, pax, ... yang beroperasi di lapisan sistem file dan tidak memblokir lapisan perangkat. Menggunakan dd elliminates kebutuhan menginstal ulang OS atau harus menandai ulang FS untuk menghindari masalah dengan SELinux.
Di bawah ini adalah apa yang biasanya saya lakukan untuk menyelesaikan tugas serupa:
1) Pertama, Anda harus mengurangi filesystem di dalam partisi yang terpengaruh yang akan terpotong. Untuk ini, gunakan alat resize2fs (dengan asumsi kita berbicara tentang ext2 / ext3 / ext4 fs - FS modern lainnya juga memiliki alat pengubah ukuran untuk tujuan yang sama). Perhatikan bahwa meskipun - untuk alasan yang jelas - sistem file tidak boleh lebih besar dari partisi di dalamnya, ia dapat dengan aman menjadi lebih kecil. Trik keamanan di sini adalah mengurangi "lebih dari yang dibutuhkan". Misalnya: bayangkan Anda memiliki sistem file 1TB yang ingin Anda migrasi ke drive 500 Gig. Dalam hal ini, saya sarankan mengurangi fs menjadi, katakanlah, 450 Gig (Anda harus memiliki cukup ruang kosong untuk ini, tentu saja, yaitu, ruang yang saat ini ditempati dalam sistem file ini tidak dapat melebihi 450 Gig). Ruang kosong sebesar 50 Gig jelas akan diperbaiki setelah migrasi data.
2) Partisi disk tujuan dengan geometri yang sesuai mengingat batasan ruangnya;
3) dd data menggunakan perangkat partisi dan bukan perangkat disk (yaitu, gunakan dd if=/dev/sda# of=/dev/sdb#
untuk setiap partisi daripada menggunakan if=/dev/sda of=/dev/sdb
). CATATAN: sda dan sdb di sini hanyalah beberapa contoh; CATATAN PENTING: Ketika melakukan dari perangkat partisi yang lebih besar ke yang lebih kecil, dd akan mengeluh tentang upaya untuk menulis posting ke akhir perangkat blok, itu ok karena data sistem file akan sepenuhnya disalin sebelum mencapai titik itu. Untuk menghindari pesan kesalahan seperti itu, Anda dapat menentukan ukuran salinan yang digunakan bs=
dan count=
parameter yang cocok dengan ukuran sistem file menyusut, tetapi ini akan memerlukan beberapa perhitungan (sederhana), tetapi jika dilakukan secara salah dapat membahayakan data Anda.
4) Setelah melakukan data, ubah ukuran sistem file masing-masing dalam partisi tujuan menggunakan size2fs lagi. Kali ini tidak menentukan ukuran sistem file baru. Ketika dijalankan tanpa spesifikasi ukuran, resize2fs menumbuhkan filesystem sehingga menempati ukuran maksimum yang diizinkan, jadi, dalam hal ini, sistem file 450 Gig akan tumbuh lagi untuk menempati seluruh partisi 500 Gig dan tidak ada byte yang akan terbuang. (Pendekatan "kurangi lebih dari yang dibutuhkan" menghindari Anda untuk secara tidak sengaja menentukan ukuran yang salah dan membahayakan data Anda. Perhatikan bahwa unit GB vs GiB bisa rumit).
Catatan untuk operasi yang lebih kompleks: Jika Anda memiliki boot manager yang ingin Anda salin, yang sangat mungkin terjadi, Anda dapat menemukan beberapa KB pertama dari disk menggunakan perangkat disk alih-alih perangkat partisi (seperti dd if=/dev/sda of=/dev/sdb bs=4096 count=5
), dan kemudian mengkonfigurasi ulang geometri di / dev / sdb (yang sementara akan berisi geometri yang tidak valid untuk drive baru tetapi boot manager yang utuh dan valid). Terakhir, lanjutkan menggunakan perangkat partisi seperti dijelaskan di atas untuk melakukan partisi pada suatu waktu. Saya melakukan operasi seperti ini berkali-kali. Baru-baru ini, saya berhasil melakukan migrasi kompleks ketika memutakhirkan dari HDD yang berisi campuran instalasi MacOSX & Linux ke SDD yang lebih kecil di MacMini6,2 saya. Dalam hal ini, saya harus mem-boot Linux dari drive eksternal, melakukan bootmanager, menjalankan gdisk untuk memperbaiki GPT di disk baru dan akhirnya menemukan setiap partisi yang berisi filesystem yang menyusut. (Perhatikan bahwa skema partisi GPT menyimpan dua salinan tabel partisi, satu di awal dan satu lagi di akhir disk. gdisk banyak mengeluh karena tidak dapat menemukan salinan kedua dari PT dan karena partisi melebihi ukuran disk, tetapi itu benar memperbaiki masalah salinan PT setelah Anda mendefinisikan ulang geometri disk). Ini adalah kasus yang jauh lebih kompleks, tetapi patut disebutkan karena menggambarkan bahwa operasi semacam ini juga sangat mungkin dilakukan.
Semoga berhasil! ... dan yang paling penting ingatlah untuk membuat cadangan semua data penting sebelum operasi semacam itu. Sebuah kesalahan dan Anda pasti dapat merusak data Anda secara tidak dapat diperbaiki.
Dan kalau-kalau saya tidak cukup menekankan: buat cadangan data Anda sebelum migrasi! :)
dd
penghitungan ukuran blok optimal berguna