Inilah situasi saya:
- Dua dedicated server di datacenter yang sama dengan gigabit ethernet di antaranya.
- Kedua server khusus ini mem-boot ke lingkungan penyelamatan berdasarkan Debian Squeeze dengan tambahan alat dan utilitas. Juga banyak ruang tmp (32GB RAM pada kedua kotak) untuk mengunduh perangkat lunak, menginstal paket, dan / atau mengkompilasi sesuai kebutuhan.
- Kedua dedicated server memiliki sekitar 3TB ruang yang dapat digunakan.
- Server "sumber" memiliki disk 4 x 1,5TB di Hardware RAID-10 dengan pengontrol port Adaptec 4.
- Server "tujuan" memiliki disk 2 x 3TB di Hardware RAID-1 dengan pengontrol port Adaptec 2 - generasi yang sama dengan yang lain, tetapi jumlah port yang berbeda.
- Jumlah blok yang dapat digunakan pada
/dev/sda
berbeda kurang dari 10 MB, tetapi array server tujuan untuk beberapa alasan beberapa MB lebih kecil. - Kedua array RAID dikonfigurasikan untuk menggunakan seluruh permukaan disk semua disk konstituen untuk membuat satu, volume RAID tunggal.
- Sistem operasi melakukan booting dalam mode MBR; tidak ada booting UEFI digunakan.
Apa yang ingin saya lakukan:
- Salin, pada lapisan blok, seluruh gambar OS (ini hanya terdiri dari bootloader GRUB2 di tabel partisi GPT, / partisi boot, dan / partisi) dari server "sumber" ke server "tujuan".
- Jika memungkinkan , salinannya akan berlangsung "langsung": ini berarti saya tidak memiliki cukup ruang untuk menyimpan file gambar disk yang tepat di sisi tujuan, kecuali jika saya membongkar gambar disk ke hard disk sebagai salinan. sedang terjadi . Koneksi ethernet gigabit antara server cukup dapat diandalkan sehingga saya nyaman dengan ini, dan tentu saja saya akan berjalan
fsck
pada kedua ujung (sumber dan tujuan) untuk memverifikasi sistem file OK sebelum dan setelah transfer. - Jika memungkinkan , jangan transfer blok melalui jaringan, yang tidak digunakan oleh sistem file konstituen di setiap partisi (semua partisi diformat sebagai ext4). Ini karena lebih dari 50% dari disk "sumber" adalah ruang kosong di
/
partisi. - Sesuaikan ukuran
/
partisi sehingga ketika disalin, ukurannya disesuaikan agar pas dengan ukuran disk tujuan yang lebih kecil. - Setelah salinan berhasil, pasang setiap volume dan perbaiki referensi ke IP statis untuk mencerminkan IP server baru. (Dapat melakukan ini dengan baik tanpa bantuan lebih lanjut)
Pertanyaan saya:
- Haruskah saya menghitung dulu perbedaan (dalam byte) antara ukuran
/dev/sda
pada setiap server, dan kemudian gunakane2resize
untuk secara non-destruktif mengurangi ukuran/
partisi di sisi sumber sehingga akan masuk ke dalam ruang sisi tujuan? - Haruskah saya menjalankan
dd
perangkat raw block,/dev/sda
dari sumber ke tujuan (lebihssh
), atau haruskah saya membuat tata letak partisi yang setara pada tujuan dan berjalandd
di setiap partisi ? Perhatikan bahwa menangani partisi pada satu waktu membuat saya masalah dengan bootloader, tetapi jika saya tidak melakukannya partisi pada suatu waktu, makadd
perlu tahu untuk berhenti mentransfer data setelah itu telah menulis banyak byte karena tujuan dapat menampung (yang diharapkan akan "menutup" bagian paling akhir dari/
partisi di blok terakhir, yang secara logis "di sebelah kanan" semua partisi lain di tata letak partisi sumber).
Beberapa misc. spesifik:
- OS host pada kotak sumber adalah Ubuntu Server 12.04 yang menjalankan beberapa tamu OpenVZ
- Karena kedua kotak di-boot menjadi penyelamat, akses disk langsung dimungkinkan tanpa mengharapkan perubahan apa pun pada data yang mendasarinya oleh sistem operasi yang berjalan.
linux
raid
migration
local-area-network
allquixotic
sumber
sumber
Jawaban:
Ini berantakan, tetapi bisa dilakukan.
Saya kira di sini yang
/
aktif/dev/sda3
dan yang/boot
aktif/dev/sda1
.Kecilkan filesystem di server lama ke ukuran seminimal mungkin.
Partisi disk server baru dengan ukuran
/boot
, swapspace, dan/
partisi baru yang identik (dan apa pun yang Anda butuhkan).Salin
/
dan/boot
filesystems.Karena partisi di server baru akan sedikit lebih kecil daripada yang ada di server lama, Anda akan menerima
No space left on device
pesan palsu di akhir ini. Namun, karena Anda mengecilkan sistem file pada langkah 1, ini tidak masalah.Ubah ukuran sistem file pada server baru ke ukuran partisi.
Instal GRUB pada disk baru.
Selesaikan sisa perbaikan Anda (alamat IP, dll.).
Anda mungkin dapat menemukan cara untuk menghindari menyalin ruang kosong partisi, tetapi mungkin Anda akan perlu waktu lebih lama untuk meneliti daripada hanya menyalin semuanya ...
sumber
oldserver
menghilangkan kebutuhan untuk menyalin semua ruang kosong? Saya tidak peduli/boot
karena itu sangat kecil, tapi/
setidaknya, saya bisa melakukannya, kan? Cukup atur sektor akhir partisi untuk menyamakan sektor apa yangresize2fs
mengatur berakhirnya sektor FS. Nah, sektor, blok ... mungkin blok . Tapi terima kasih untuk ini! Ini bagus!/dev/sda3
menjadi sekitar 1,3 TB dan akan menyalinnya ke partisi di tujuan yang diperkirakan akan menampung sekitar 2,9 TB.Saya akan
mkfs
menyegarkan filesystem di server baru, kalau begitursync
dari sistem lama. Itu dapat dimulai kembali, konsisten, dan setiap file mudah diverifikasi secara individual. Di mana Anda membuang bagian sistem file yang tidak terpakai (bukan salinan forensik), saya tidak melihat alasan untuk tidak menggunakan metode ini. Anda harus menjalankan kembali GRUB, tetapi itu seharusnya tidak menjadi tantangan.Menjelaskan salinan mentah yang sadar-sistem file akan memakan waktu cukup lama, jadi kecuali Anda berkomentar mengapa solusi rsync saya tidak berfungsi, saya tidak perlu mengetik.
sumber
partimage
dapat melakukan salinan mentah yang sadar filesystem, tetapi tidak mendukungext4
. Jadi ada yang sebagai pilihan ...rsync
tampak lebih bagus sebagai pilihan, selama itu mempertahankan semua kontrol akses diskresioner (alachmod
) dan dapat menyalin dengan bersih lebih dari symlink dan file perangkat ...Jika Anda BENAR-BENAR ingin mentransfer data pada tingkat perangkat blok, saya dapat memikirkan satu trik yang cukup berguna yang saya gunakan untuk memigrasi server dengan downtime minium yang terlibat.
Masalahnya, Anda dapat membuat mirror terdegradasi pada server sumber dengan partisi data Anda menjadi satu-satunya bagian aktif dari mirror, kemudian mengekspor partisi tujuan dari server kedua melalui AOE (saya kira kedua server Anda berada dalam domain broadcast yang sama). Di server sumber Anda kemudian menghubungkan perangkat blok jaringan ke cermin terdegradasi Anda sehingga akan mulai membangun kembali. Tunggu sampai pembangunan kembali selesai, hentikan mirror Anda, lepaskan perangkat yang diekspor AOE dan Anda baik-baik saja.
Sedikit lebih banyak detail mengikuti (saya akan mencoba membuatnya singkat).
Komponen:
mdadm
dengan mode build -nya (cermin ad-hoc tanpa metadata);vblade
untuk mengekspor perangkat blok sebagai perangkat jaringan AOE;aoe-tools
untuk mengimpor perangkat blok jaringan AOE.Anda harus membuat tabel partisi pada server tujuan Anda, kemudian mengecilkan partisi sumber sehingga cocok dengan tujuan. Anda dapat dengan mudah menginstal GRUB ke MBR baru Anda; sinkronisasi hanya partisi di atas tabel partisi yang baru dibuat sedikit lebih rentan kesalahan.
Di sisi penerima Anda harus mengekspor partisi Anda dengan
vblade
alat, pada server sumber Anda dapat melihat perangkat yang diekspor setelah menginstalaoe-tools
(jalankanaoe-discover
kemudian lihat/dev/ether/
perangkat).Maka Anda harus membangun perangkat raid1 di server sumber dengan drive sumber Anda :
Setelah ini, Anda dapat memeriksa cermin yang baru dibangun:
Pada titik ini Anda dapat dengan aman melampirkan partisi tujuan yang diekspor ke cermin ini:
Kemudian, awasi kemajuan sinkronisasi:
Setelah sinkronisasi selesai, hentikan mirror:
mdadm --stop /dev/md0
di server sumber, hentikanvblade
proses di server tujuan, instal GRUB di server kedua, ubah alamat IP Anda, dll.Sebenarnya, dengan trik ini adalah mungkin untuk memindahkan server di antara kotak-kotak hampir hidup, dengan downtime hanya untuk mem-boot ulang kotak yang disinkronkan.
Untuk alasan kinerja, saya juga menyarankan Anda meningkatkan MTU tautan Anda (atau mengatur VLAN terpisah dengan bingkai jumbo diaktifkan, jika mungkin).
Catatan, Anda juga dapat menggunakan sesuatu seperti
nbd-server
/nbd-client
(atau bahkan iSCSI, jika Anda menginginkannya kasar) sebagai alternatif untuk AOE, tetapi AOE (vblade
+aoe-tools
) memiliki antarmuka yang sangat sederhana dan kinerja yang hebat (tanpa overhead TCP / IP),sumber
mdadm
? Saya menggunakan perangkat keras RAID. Dan saya tidak tahu apa itu AOE, dan tidak pernah menggunakan iSCSI. Saya tidak berpikir server saya berada di domain broadcast yang sama, hanya di pusat data yang sama. Setidaknya ada satu atau dua sakelar di antara server.nbd-server
dannbd-client
paket).mdadm
digunakan hanya untuk menyinkronkan dua perangkat blok, tidak ada metadata yang ditulis dalambuild
mode, sehingga Anda dapat menggunakannya di atas perangkat blok apa pun (harus di-unmount dulu). Masalahnya, saya biasanya mengatur sistem baru pada serangan mdadm terdegradasi bahkan jika saya memiliki serangan hardware yang mendasari, cara ini saya bisa menerapkan teknik yang dijelaskan tanpa harus meng-unmount partisi, mengurangi downtime migrasi ke waktu reboot tunggal.