Debian / Grub2: Memindahkan partisi root ke drive baru?

30

Adakah yang punya saran untuk cara memindahkan partisi root ke drive baru dan mengatur grub2 untuk boot di drive itu? Sepertinya saya tidak beruntung menginstruksikan grub-mkconfig apa yang ingin saya lakukan (misalnya chroot'int ke root baru saya hanya membingungkan semua skrip).

Latar Belakang Saya menjalankan Debian Squeeze pada NAS berkekuatan rendah tanpa kepala. Pengaturan saya saat ini /aktif sda0dan /bootaktif sde0(kartu CF): Saya perlu terpisah /bootkarena sd[a-d]perlu melakukan spin-up yang tertunda. Sekarang saya telah menemukan disk 2,5 "IDE lama untuk digunakan sebagai /termasuk /bootuntuk memungkinkan saya untuk memutar semua disk besar ke bawah.

Apa yang saya coba Pada dasarnya saya pergi

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

Kemudian saya mencoba

chroot /mnt/newroot
update-grub

Tapi itu gagal dengan grub yang menanyakan apakah root sudah di-mount. Kemudian saya melakukan upaya setengah hati dalam pengaturan /mnt/newroot/grub/grub.cfguntuk menemukan kernel image aktif sdf5, diikuti oleh a grub-install --root-directory=/mnt/newroot /dev/sdf. Tapi ini baru saja membuat saya merasa tidak aman ketika saya mencoba booting sdf.

Paket cadangan saya hanya menginstal ulang, jadi pertanyaan bonus (tidak ada tanda centang untuk yang ini): Apa yang harus saya lakukan untuk mendapatkan konfigurasi lvm2 dan mdadm saya? Apakah semuanya disimpan dalam sistem file (dan apakah akan secara otomatis ditemukan), atau apakah saya harus mengambilnya sendiri?

Solusi (terima kasih kepada Maciej Piechotka): Seperti yang ditunjukkan Maciej, saya perlu melakukan chroot yang tepat agar semua alat grub bekerja. Untuk referensi, ini adalah bagaimana saya melakukannya:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

Semua file sekarang disalin (lihat di sini untuk diskusi tentang strategi salin). Perbaiki yang baru etc/fstabuntuk menunjuk ke root baru:

janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old  etc/fstab
    -UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 /     ext3 errors=remount-ro         0 1
    -UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults                  0 2
    +UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 /     ext3 noatime,errors=remount-ro 0 1

Akhirnya, mount dev, sysdan procke root dan chroot yang baru:

janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none  /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on 
janus@nasguld:/mnt/newroot$ sudo chroot .

Kami sekarang chroot ke root masa depan persis seperti yang akan terlihat. Menurut Maciej, seharusnya tidak apa-apa untuk hanya menelepon grub-install, tapi saya melakukan yang update-grubpertama untuk melihat yang dihasilkan /boot/grub/grub.cfgsebelum menginstal bootloader. Saya tidak yakin ini akan diperbarui secara otomatis?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Janus
sumber
Posting konten /etc/default/grub, dan transkrip yang tepat dari update-grub.
Gilles 'SANGAT berhenti menjadi jahat'
(Pemikiran setelah menambahkan solusi): Mungkin sebenarnya masalahnya adalah bahwa saya belum memperbarui /etc/fstabdalam chroot(ini akan konsisten dengan update-grubmengeluh bahwa "\ tidak dipasang"). Jika saya melakukan ini lagi, saya akan coba dulu tanpa repot me-mount sistem file khusus di chroot.
Janus
hanya sebuah catatan: jangan lupa untuk meng-unmount / mnt / newroot sebelum reboot!
Giacomo Tesio
Berikut adalah petunjuk tentang cara memindahkan partisi root / ke drive nvme baru, sambil menjaga / home di hdd. lucasmanual.com/blog/…
Lucas

Jawaban:

20

Pasang sistem file dasar dan salin / modifikasi file sambil chroot seperti:

  • / dev ( mount -o bind /dev/ /path/to/chroot/dev)
  • / proc ( mount -t proc none /path/to/chroot/proc)
  • / sys ( mount -t sysfs none /path/to/chroot/sys)

IIRC yang berfungsi untuk saya saat menginstal Grub 2 di arch dan berkali-kali di Gentoo. Kemudian setelah /path/to/chrootperintah chroot cukup:

grub-install /dev/<boot_disk>

Pada lvm2 (dan saya percaya madm tapi saya belum menggunakannya) konfigurasi disimpan pada disk. Ada konfigurasi apa yang harus dibaca untuk menemukan perangkat. Dengan asumsi perangkat Anda berada di lokasi standar ( /dev/sd*atau /dev/hd*) seharusnya tidak ada masalah.


PS. Saya tidak akan mempercayai cp sederhana dari sistem hidup karena ada beberapa tempat yang salah:

  • Lupa mengubah /etc/fstabdan file berguna lainnya
  • File berubah selama akses
  • Mengatasi sampah ( /tmpdll.)
Maciej Piechotka
sumber
Terima kasih. Jadi pada dasarnya, Anda mengatakan saya melakukan chroot ceroboh :) Saya akan mencobanya dengan chroot yang tepat. cp -axharus baik-baik saja (mungkin setelah turun ke runlevel pengguna tunggal) sesuai dengan howto lama ini: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus
Pesona yang berhasil! Terima kasih banyak atas bantuannya.
Janus
1
@ Janus: Saya akan menyalin data dari Live distro agar aman. Saya senang namun itu berhasil.
Maciej Piechotka
Saya harus lakukan update-grubsebelumnya install-grub.
Aryeh Leib Taurog
3

Anda dapat menginstal grub dari distro langsung tanpa chroot:

grub-install /dev/hda --root-directory=/mnt/guest/
jet
sumber
Terima kasih. Saya tidak yakin ini akan bekerja di sini: seperti yang saya mengerti, grub-installhanya memperbarui file gambar grub dan menulis MBR: Secara khusus, grub.cfgtidak diperbarui. Seperti yang saya komentari di atas, pemasangan dir khusus mungkin berlebihan, tetapi saya masih berpikir chroot adalah cara untuk memperbarui grub.cfgdengan cara yang sederhana?
Janus
Ya, ini juga tidak berhasil untuk saya. Anda harus mulai update-grubbekerja dan yang tidak Anda miliki --root-directoryatau tidak, tidak?
Mitar
0

BTW jika Anda menambahkan partisi (seperti windows) di mana Anda tidak ingin grub menulis di sektor boot, tetapi Anda ingin grub tahu tentang hal itu ketika komputer Anda boot, Anda dapat memindai ulang partisi dan menghasilkan file grub.cfg baru dengan menggunakan perintah grub_mkconfig seperti berikut dalam sesi terminal

cd / boot / grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

Sekarang ketika Anda mem-boot dari partisi linux Anda saat ini (yang telah mem-boot grub) sekarang akan tahu tentang partisi lain.

pengguna129087
sumber