Bagaimana cara terbaik mengkloning sistem yang sedang berjalan ke harddisk baru menggunakan rsync?

22

Saya memiliki sistem yang berjalan sebagai server yang memiliki harddisk yang gagal. Sementara semua data penting ada di RAID dan dicadangkan dan semua itu, saya tidak memiliki gambar sistem itu sendiri. Tidak ada kebutuhan khusus karena saya dapat melakukan instalasi tentu saja, tetapi saya masih ingin mencoba melakukan hotcopy terlebih dahulu sebelum hanya menyusuri jalur pemulihan. Saya tahu ada beberapa kerugian untuk ini sebagai proses, tetapi di sana saya tidak berpikir ada banyak kerugian untuk mencobanya sebagai upaya pertama.

  • OS: Ubuntu 12.04.4 LTS
  • Tanpa kepala
  • Saya tidak berharap untuk menginstal terlalu banyak perangkat lunak baru karena disk sudah gagal :)
  • Sistem sedang berjalan. Saya takut menghentikannya meningkatkan kemungkinan disk tidak kembali naik. Ini berarti dd mungkin keluar?
  • Disk baru tidak berukuran sama (dua kali lebih besar) daripada yang lama semakin memperumit masalah dd.

Gagasan saya adalah

  • hotplug drive baru di sistem
  • membuat sistem file
  • pasang di / mnt / somedir
  • rsync file
  • beberapa sihir fstab
  • beberapa sihir booting

Pertanyaan yang masih saya miliki adalah:

Apa yang akan menjadi perintah rsync yang baik? Saya berencana:

rsync -aAXx  / /mnt/somedir/ 
   --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found}

(Saya melewatkan beberapa dir lagi, misalnya raid saya mount dll)

Di mana opsinya adalah:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls                  preserve ACLs (implies -p)
-X, --xattrs                preserve extended attributes
-x, --one-file-system       don't cross filesystem boundaries

Saya secara khusus melewatkan -H, -v dan - kemajuan untuk mempercepat proses.
Apakah itu akan berhasil untuk Ubuntu? Saya tidak yakin apakah Ubuntu menggunakan hardlink, tapi saya rasa saya tidak perlu opsi, kan?

Setelah menjalankan ini saya bisa reboot (mungkin dengan live usb drive) dan menjalankan kembali rsync jika disk lama masih dimulai. Ini akan memperbaiki file yang tidak dapat dibaca / diubah karena sistem berjalan saya kira.


Bagaimana cara memperbaiki booting?
Maka rencana saya adalah untuk mengubah UUID /di fstab saya (masih harus google bagaimana menemukan uuid), dan melakukan beberapa sihir sehingga sistem benar-benar melakukan booting dari disk baru

Apakah saya sudah melupakan sesuatu atau sudah merencanakan sesuatu yang bodoh?

Nanne
sumber

Jawaban:

16

Anda dapat mengambil UUID untuk semua perangkat blok dengan blkidperintah. (Anda ingin yang hanya mengatakan UUID, bukan PARTUUID)

Opsi rsync yang saya gunakan adalah -avhPHAXx.

Saya tidak berpikir -v atau --progres akan mempercepat apa pun kecuali Anda berada di konsol / tty yang sangat lambat.

Menggunakan -x menghilangkan kebutuhan untuk semua pengecualian Anda dengan asumsi mereka semua berada pada sistem file yang berbeda (pada sistem saya, semua kecuali yang hilang + ditemukan).

Satu-satunya program yang sering digunakan yang saya tahu yang menggunakan tautan keras (setidaknya pada sistem saya) adalah git, jadi itu sebabnya saya menambahkan opsi -H. Satu-satunya masalah yang saya pikir Anda akan miliki dengan tidak menggunakan -H adalah bahwa itu akan memakan ruang lebih sedikit.

Sedangkan untuk bootloader, jika Anda menggunakan GRUB2 dengan MBR, maka perintah yang saya gunakan adalah grub-install /dev/sda(ganti sda dengan drive yang tepat untuk Anda). Itu akan membuat drive baru dapat di-boot. Jika Anda menggunakan bootloader atau UEFI yang berbeda, maka saya akan memeriksa google untuk mendapatkan boot drive baru dengan benar. Ingatlah bahwa / boot pada drive baru harus berada pada partisi yang sama seperti saat ini (dengan asumsi Anda tidak menggunakan UUID untuk / boot juga), jika tidak, Anda perlu memodifikasi fstab sesuai itu.

bparker
sumber
Saya tidak percaya saya memilikinya pada sistem yang terpisah, saya khawatir, jadi pengecualiannya tampaknya bijaksana. Saya membaca hal-hal campuran tentang kecepatan - v, jadi saya tidak yakin apa yang harus dilakukan di sana;). Git adalah poin yang bagus, saya yakin / home punya itu!
Nanne
1
Nah, / proc, / sys dan kemungkinan besar / dev adalah filesystem / mountpoints yang berbeda dari /, jadi sama sekali tidak ada alasan untuk mengecualikan mereka ketika Anda memiliki -x. Jika Anda tidak yakin apa yang menjadi bagian dari sistem file root Anda atau tidak, jalankan saja mountuntuk memeriksa. Apa pun yang ada di sana tidak perlu dikecualikan secara manual.
bparker
Saya tidak yakin bagaimana dan mengapa, tetapi pengecualiannya tetap salah. Mereka benar-benar dalam dry-run yang saya lakukan, tidak yakin mengapa. (well, saya menyalin format dari tempat semi-acak, jadi mungkin itu alasannya?). Ngomong-ngomong, dengan -x sesuai dengan saran Anda, saya tidak terlalu khawatir, satu-satunya hal tambahan yang terjadi adalah bahwa beberapa hal yang tidak penting (misalnya backup lama-of-backup) telah 'disimpan' juga.
Nanne
Ini menyelamatkan saya $. Saya mengkloning sistem 12GB + pada Linode ke simpul baru. Setelah 5+ tahun kemudian, ini masih berfungsi. Terima kasih kawan!
geeth
Jadi ketika mempartisi sistem file yang dikloning siap untuk menerima klon, haruskah partisi root saya mengatur flag boot sementara saya menyimpannya insync, atau apakah saya mengaturnya sebelum memasukkan drive yang dikloning ke dalam produksi. Kalau tidak, saya akan menganggap drive kloning kemudian bootable yang sebenarnya tidak diinginkan. Dalam situasi saya, klon drive saya adalah disk di server yang terpisah. Dan Rsync digunakan untuk membuatnya tetap selaras dengan prod.
NZ Dev
11

Saya berhasil melakukannya (setelah beberapa kali mencoba).

Saya menggunakan

sudo rsync -ahPHAXx --delete --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} / /mnt

Kemudian saya mengatur ulang /mnt/etc/fstabfile saya untuk partisi boot dan ruang swap saya.

Maka saya perlu mengatur ulang GRUB

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
sudo grub-install --recheck /dev/sdX
sudo update-grub
teeks99
sumber
Perhatikan bahwa ini hanya untuk disk yang diformat MBR.
Teque5
2

Jangan mencoba memperbaiki boot dengan drive ini; rekomendasi saya:

  1. Sambungkan drive pada komputer lain alih-alih mengambil risiko hotswap pada mesin yang rusak.
  2. rsync file non-sistem Anda menyeberang ke disk baru.
  3. Pada hard disk yang terpisah, buat boot, root minimal, dan swap. Instal sistem operasi yang sama yang ingin Anda tiru dari hard disk yang sakit.
  4. Boot dari disk baru ini (idealnya di mesin terpisah, jika Anda tidak bisa mengambil risiko downtime pada host target, jika tidak, Anda bisa boot host target dengan disk ini).
  5. Tambahkan disk dari langkah # 2 ke sistem baru ini, dengan titik pemasangan yang benar. Sekarang Anda memiliki tiruan dari drive sistem. Anda dapat (secara opsional) menyalin partisi ke disk baru ini, tetapi rekomendasi saya adalah menjaga disk sebagai persyaratan minimum untuk mem-boot OS Anda. Seperti yang telah Anda sadari, memiliki terlalu banyak hal pada partisi utama membuat pemulihan menjadi sulit. Pastikan Anda menyalin konfigurasi jaringan dengan benar karena server Anda tidak memiliki kepala.
  6. Cukup ganti drive pada sistem yang sakit dengan pasangan disk baru ini (jika Anda memilih untuk tidak mem-boot target pada langkah # 4).
  7. Mulai ulang.
Burhan Khalid
sumber
Saya dapat mengambil risiko downtime, ini adalah server yang tidak penting. Saya akan menggunakan hotswap (dasarnya hot-add) karena salinan itu akan jauh lebih cepat. Seharusnya tidak ada terlalu banyak risiko yang saya pikir, karena kita berbicara SATA (setidaknya II). Selain itu, apa alasan untuk menyarankan disk boot tambahan? Bukankah itu mempersulit masalah untuk beberapa perangkat lunak yang sudah diinstal, homedirs dll? Kedengarannya seperti lebih banyak pekerjaan yang saya coba hindari: D
Nanne
Itu yang saya gunakan dalam produksi; Saya me-mount / home, / etc, / var, / usr dan / opt pada disk eksternal (sebenarnya pada LVM), dan / dan / boot pada disk yang terpisah. Dengan cara ini saya tidak perlu khawatir ketika disk utama gagal saya hanya menukarnya tanpa mempengaruhi layanan saya :) Ini sedikit bekerja pada awalnya tetapi menghemat Anda dalam jangka panjang. Terutama ketika Anda kehabisan ruang pada partisi dan perlu menambah volume tanpa downtime.
Burhan Khalid
Meskipun Anda membuat poin yang baik, itu bukan persyaratan yang saya miliki saat ini, tidak perlu :). Ada beberapa disc lain dalam sistem (sekitar 7) dan saya harus menggambar garis di suatu tempat; D. Jadi OS tidak perlu dipisah saat ini. Maksud saya: Saya setuju sistemnya baik, hanya saja bukan sesuatu yang saya cari sekarang; D. Jadi jika saya meninggalkan semuanya pada 1 disk, fakta saya menyalin eksternal akan membuatnya sangat lambat, bukan?
Nanne
Tergantung pada antarmuka Anda ke eksternal, lebih dari ethernet itu harus cepat, lebih dari USB 2 lebih cepat, pada USB 3 lebih cepat. Ini tidak akan membuatnya sangat lambat - tentu saja jangan menyalin direktori yang sedang ditulis (seperti, / tmp, yang Anda tidak perlu tetap) atau di mana pun pipa ditulis.
Burhan Khalid
0

Saya telah menghabiskan banyak waktu pada distro Centos Freepbx ke rsync dan memiliki disk baru yang dapat di-boot dan akhirnya setelah memperbaiki fstab dan grub UUID tidak berfungsi.

Langkah terakhir untuk membuatnya berfungsi adalah

dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1
dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1
grub

Ketika Anda berada di Grub CLI (yaitu saat grub>diminta):

device (hd0) /dev/sda
device (hd1) /dev/sdb
root (hd0,0) 
setup (hd0) 
root (hd1,0)
setup (hd1)
quit

Tekan enterdan Anda sekarang dapat mematikan, menghapus disk lama dan boot dengan yang baru.

Comdif
sumber