Debian / Grub2: ย้ายพาร์ติชั่นรูทไปยังไดรฟ์ใหม่หรือไม่?


30

ใครบ้างมีคำแนะนำสำหรับการย้ายพาร์ติชันรูทไปยังไดรฟ์ใหม่และตั้งค่า grub2 เพื่อบู๊ตบนไดรฟ์นั้นหรือไม่? ฉันดูเหมือนจะไม่มีโชคในการสั่ง grub-mkconfig ว่าฉันต้องการทำอะไร (เช่น chroot'int ในรูทใหม่ของฉันเพียงแค่ทำให้สคริปต์ทั้งหมดสับสน)

พื้นหลังฉันใช้ Debian Squeeze บน NAS ที่ใช้พลังงานต่ำ การตั้งค่าปัจจุบันของฉัน/เปิดอยู่sda0และ/bootเปิดsde0(การ์ด CF): ฉันต้องการแยกต่างหาก/bootเพราะsd[a-d]ต้องหมุนช้า ตอนนี้ฉันได้พบดิสก์ IDE 2.5 "รุ่นเก่าเพื่อใช้/รวม/bootถึงอนุญาตให้ฉันหมุนดิสก์ขนาดใหญ่ทั้งหมดลง

สิ่งที่ฉันลองโดยทั่วไปฉันไป

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

จากนั้นฉันก็ลอง

chroot /mnt/newroot
update-grub

แต่นั่นล้มเหลวเมื่อด้วงถามว่ารูทถูกเมานท์หรือไม่ จากนั้นผมได้พยายามครึ่งใจที่การตั้งค่า/mnt/newroot/grub/grub.cfgที่จะหาภาพ kernel บนตามด้วยsdf5 แต่เพียงแค่นี้ฉันเป็นเจ้าของที่ดินพรอมต์กู้ภัยด้วงเมื่อฉันพยายามบูตจากgrub-install --root-directory=/mnt/newroot /dev/sdfsdf

แผนการสำรองข้อมูลของฉันเพิ่งจะติดตั้งใหม่ดังนั้นคำถามโบนัส (ไม่มีเครื่องหมายถูกสำหรับสิ่งนี้): ฉันต้องทำอะไรเพื่อรับการกำหนดค่า lvm2 และ mdadm ของฉัน มันทั้งหมดถูกเก็บไว้ในระบบไฟล์ (และจะถูกค้นพบโดยอัตโนมัติ) หรือฉันจำเป็นต้องใช้มันเอง?

วิธีแก้ปัญหา (ขอบคุณ Maciej Piechotka): เมื่อ Maciej ชี้ให้เห็นว่าฉันต้องใช้ chroot ที่เหมาะสมสำหรับเครื่องมือด้วงทั้งหมดในการทำงาน สำหรับการอ้างอิงนี่เป็นวิธีที่ฉันทำ:

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

ตอนนี้ไฟล์ทั้งหมดจะถูกคัดลอก (ดูที่นี่สำหรับการอภิปรายกลยุทธ์การคัดลอก) แก้ไข new etc/fstabto the ชี้ไปที่รูทใหม่:

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

สุดท้ายเมานdevท์sysและprocไปที่รูทและ chroot ใหม่:

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 .

ตอนนี้เราถูก chrooted ไปที่รูตในอนาคตอย่างที่มันจะดู ตาม Maciej มันก็โอเคที่จะแค่โทรgrub-installแต่ฉันได้update-grubก่อนเพื่อดูที่สร้างขึ้น/boot/grub/grub.cfgก่อนที่จะติดตั้ง bootloader ฉันไม่แน่ใจว่าจะมีการอัปเดตอัตโนมัติหรือไม่

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb

โพสต์เนื้อหาของและหลักฐานที่แน่นอนจาก/etc/default/grub update-grub
Gilles 'SO- หยุดความชั่วร้าย'

(ความคิดหลังจากเพิ่มวิธีแก้ปัญหา): อาจเป็นไปได้ว่าปัญหาคือว่าฉันไม่ได้อัปเดต/etc/fstabในchroot(ซึ่งจะสอดคล้องกับการupdate-grubบ่นว่า "\ ไม่ได้ติดตั้ง") หากฉันจะทำสิ่งนี้อีกครั้งฉันจะลองก่อนโดยไม่รบกวนการติดตั้งระบบไฟล์พิเศษใน chroot
Janus

เพียงแค่ทราบ: อย่าลืม unmount / mnt / newroot ก่อนรีบูต!
Giacomo Tesio

นี่คือคำแนะนำเกี่ยวกับวิธีการย้ายพาร์ติชั่นรูท / ไปยังไดรฟ์ nvme ใหม่ในขณะที่ยังคง / home บน hdd lucasmanual.com/blog/…
Lucas

คำตอบ:


20

เมานต์ระบบไฟล์พื้นฐานและคัดลอก / แก้ไขไฟล์ในขณะที่ chrooting เช่น:

  • / 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 ที่เหมาะกับฉันในขณะติดตั้ง Grub 2 ในซุ้มประตูและบน Gentoo หลายต่อหลายครั้ง จากนั้นหลังจาก chroot เพื่อ/path/to/chrootควบคุมเป็นเพียง:

grub-install /dev/<boot_disk>

ในฐานะของ lvm2 (และฉันเชื่อว่า madm แต่ฉันไม่ได้ใช้) การกำหนดค่าจะถูกเก็บไว้ในดิสก์ มีการกำหนดค่าสิ่งที่ควรอ่านเพื่อค้นหาอุปกรณ์ สมมติว่าอุปกรณ์ของคุณอยู่ในตำแหน่งมาตรฐาน ( /dev/sd*หรือ/dev/hd*) ไม่ควรมีปัญหา


PS ฉันจะไม่เชื่อถือ cp ง่าย ๆ ของระบบ live เนื่องจากมีหลายที่ที่มันผิดพลาด:

  • ลืมเปลี่ยน/etc/fstabและไฟล์ที่มีประโยชน์อื่น ๆ
  • ไฟล์ถูกเปลี่ยนระหว่างการเข้าถึง
  • การจัดการขยะ ( /tmpฯลฯ )

ขอบคุณ โดยพื้นฐานแล้วคุณกำลังบอกว่าฉันทำ chroot เลอะเทอะ :) ฉันจะลองกับ chroot ที่เหมาะสม cp -axควรจะดี (อาจหลังจากที่ปล่อยให้ runlevel ผู้ใช้คนเดียว) ตามวิธีการเก่านี้: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus

ใช้เสน่ห์ได้! ขอบคุณมากสำหรับความช่วยเหลือ
Janus

1
@ Janus: ฉันต้องการคัดลอกข้อมูลจาก Live distro เพื่อความปลอดภัย ฉันดีใจที่มันใช้งานได้
Maciej Piechotka

ผมต้องทำก่อนupdate-grub install-grub
Aryeh Leib Taurog

3

คุณสามารถติดตั้งด้วงจาก distro สดโดยไม่ต้อง chrooting:

grub-install /dev/hda --root-directory=/mnt/guest/

ขอบคุณ ฉันไม่แน่ใจว่าสิ่งนี้จะทำงานได้ที่นี่: ตามที่ฉันเข้าใจgrub-installอัปเดตเฉพาะไฟล์ภาพด้วงและเขียน MBR: โดยเฉพาะgrub.cfgไม่อัปเดต ตามที่ฉันแสดงความคิดเห็นข้างต้นการติดตั้ง dirs พิเศษอาจ overkill แต่ฉันยังคงคิดว่า chroot เป็นวิธีการอัปเดตgrub.cfgในวิธีที่ง่าย?
Janus

ใช่มันไม่ได้ผลสำหรับฉันเช่นกัน คุณต้องไปupdate-grubทำงานและ--root-directoryสิ่งนั้นไม่มีหรือเปล่า?
Mitar

0

BTW ถ้าคุณกำลังเพิ่มพาร์ติชัน (เช่น windows) ที่คุณไม่ต้องการให้ด้วงเขียนในบูตเซกเตอร์ แต่คุณต้องการให้ด้วงรู้เกี่ยวกับมันเมื่อบูตคอมพิวเตอร์คุณสามารถสแกนพาร์ติชั่นและสร้าง ไฟล์ grub.cfg ใหม่โดยใช้คำสั่ง grub_mkconfig ดังต่อไปนี้ในเทอร์มินัลเซสชัน

cd / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

ตอนนี้เมื่อคุณบู๊ตออกจากพาร์ติชั่นปัจจุบันของ linux (ที่ด้วงบูท) มันจะรู้เกี่ยวกับพาร์ติชั่นอื่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.