วิธีแก้ไข UUID ใน Grub หลังจากกู้คืนจากเครื่องอื่น?


22

ฉันต้องการคืนค่าการสำรองข้อมูล tar ที่สมบูรณ์ของ Ubuntu 12.04 ด้วยการปรับแต่งเอกสารเอกสารซอฟต์แวร์ที่ติดตั้งและอื่น ๆ ให้กับเครื่องอื่น

ฉันทำสำเนาสำรองด้วยคำสั่งต่อไปนี้:

sudo su
cd /
tar cvpzf ububackup.tgz --exclude=/ububackup.tgz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/tmp --exclude=/media /

ในคอมพิวเตอร์เครื่องใหม่ฉันติดตั้ง Ubuntu 12.04 ครั้งใหม่ย้ายไฟล์สำรองไปไว้แล้วคืนค่าด้วยไฟล์สำรองข้อมูลดังนี้:

tar xvpfz backup.tgz -C /

ตามที่คาดไว้ (ดู Mike สิ่งที่คำตอบสำหรับคำถามนี้: คัดลอก Ubuntu distro ด้วยการตั้งค่าทั้งหมดจากคอมพิวเตอร์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ) สิ่งนี้ทำให้ด้วงแตก เมื่อฉันเปิดคอมพิวเตอร์ฉันพบข้อผิดพลาด:

error: no such device: ...

press any key to continue ...

ฉันเชื่อว่าสาเหตุที่ Grub เสียคือ UUID กำลังมองหาข้อมูลที่ตรงกันบนฮาร์ดไดรฟ์เก่าที่ไม่ได้อยู่ในฮาร์ดไดรฟ์สำหรับคอมพิวเตอร์

ฉันจะแก้ไขด้วงของฉันให้รู้จักฮาร์ดไดรฟ์ตัวใหม่ได้อย่างไร ฉันดูออนไลน์เพื่อขอความช่วยเหลือ "Fix GRUB UUID" แต่ขั้นตอนดูเหมือนล้าสมัยหรือซับซ้อน การตอบสนองจาก Mike ฉันเชื่อมโยงกับข้างบนทำให้ฉันหวังว่าจะมีวิธีที่ง่ายในการแก้ไขปัญหานี้


1
ทำไมคุณไม่ใช้ clonezilla (clonezilla.org) เพื่อสร้างสแน็ปช็อตของคอมพิวเตอร์เครื่องเก่าของคุณและเรียกคืนในคอมพิวเตอร์เครื่องใหม่? ฉันคิดว่ามันจะง่ายขึ้นจริง ๆ เพราะคุณดูเหมือนจะต้องการเก็บทุกอย่างไว้ มิฉะนั้นการสำรองข้อมูล (/ home, / etc, / usr / local, / var) และการกู้คืนข้อมูลและการปรับแต่งของคุณยกเว้นซอฟแวร์เป็นเรื่องง่ายเกินไป ... เพื่อแก้ปัญหาปัจจุบันของคุณคุณจะต้องเปลี่ยน UUID (s) ใน / etc / fstab และ /boot/grub/menu.lst คุณสามารถใช้ Ubuntu ติดตั้งซีดีเพื่อรับ UUID [gparted หรือบรรทัดคำสั่ง] และทำการเปลี่ยนแปลง
Golboth

คำตอบ:


19

เพื่อแก้ปัญหาปัจจุบันของคุณคุณจะต้องเปลี่ยน UUID ใน "/ etc / fstab" และ "/boot/grub/grub.cfg" (หากินมาก)

คุณสามารถใช้ Ubuntu ติดตั้งซีดีเพื่อรับ UUID ด้วย gparted (คุณต้องคลิกขวาที่พาร์ติชันที่คุณต้องการรับ UUID แล้วคลิกที่ "ข้อมูล" จากนั้นเลือก UUID และคัดลอกด้วย CTRL + C) หรือบรรทัดคำสั่ง ( sudo blkid)

จากนั้นคุณต้องแก้ไข "/ etc / fstab" บนวอลลุ่มที่เหมาะสมด้วย gedit, nano หรืออย่างอื่น

ในเทอร์มินัลพิมพ์:

gksudo gedit /etc/fstab

และแทนที่ UUID เก่าด้วยอันใหม่

สำคัญ: แน่นอนถ้าคุณใช้ซีดีสำหรับบูตเพื่อทำเช่นนั้นคุณจะต้องเพิ่ม "/ media / xxxxx" ก่อน "/ etc / fstab": "/ media / xxxxx / etc / fstab" คุณยังสามารถใช้gksudo geditและเปิดไฟล์เพื่อแก้ไขด้วยตัวเอง

คำเตือน: การแก้ไข "/boot/grub/grub.cfg" นั้นยุ่งยากมาก sudo update-grubโดยปกติควรได้รับการสร้างขึ้นด้วยคำสั่ง

แทนที่ UUIDs เก่าด้วยอันใหม่ใน "/boot/grub/grub.cfg" โดยป้อนสิ่งต่อไปนี้ในเทอร์มินัล:

gksudo gedit /boot/grub/grub.cfg

สำคัญ: แน่นอนถ้าคุณใช้ซีดีสำหรับบูตเพื่อทำเช่นนั้นคุณจะต้องเพิ่ม "/ media / xxxxx" ก่อน "/boot/grub/grub.cfg": "/ media / xxxxx / boot / grub / grub cfg" คุณยังสามารถใช้gksudo geditและเปิดไฟล์เพื่อแก้ไขด้วยตัวเอง

หากคุณใช้โซลูชันที่ยุ่งยากฉันขอแนะนำให้คุณเปิดใช้งานsudo update-grubเมื่อคุณบูตระบบสำเร็จ

วิธีที่สะอาดและเรียบง่ายในการปรับแต่งด้วงอย่างเหมาะสมอาจใช้ดิสก์ซ่อมแซมการบู๊ตเช่น "Boot-Repair-Disk": http://sourceforge.net/p/boot-repair-cd/home/Home/

ฉันหวังว่านี่จะช่วยคุณแก้ปัญหาของคุณ

อย่างไรก็ตามคุณอาจลองใช้ Clonezilla เพื่อทำซ้ำคอมพิวเตอร์เก่าบนคอมพิวเตอร์เครื่องใหม่ตามที่ระบุไว้ในความคิดเห็นของฉัน


ขอบคุณ Golboth ฉันสิ้นสุดลงโดยใช้ข้อเสนอแนะของคุณในการใช้ดิสก์การซ่อมแซมการบูตและใช้งานได้
snowguy

โปรดทราบว่า clonezilla อาจไม่สามารถแก้ไขได้ ฉันเพิ่งคัดลอก hdd ทั้งหมดของฉัน (ผ่าน clonezilla) ไปยัง SSD และมี UUID ที่แน่นอนเหมือนกันสำหรับ hdd และ SSD ลงเอยด้วยการเปลี่ยน uuid ด้วยตนเองบน ssd จากนั้นในไฟล์ที่กล่าวถึงข้างบนใน SSD ที่ยังคงมี fallback hdd เป็น ระบบปฏิบัติการที่เป็นไปได้
Dennis Nolte

3

สันนิษฐานว่านี่หมายถึงด้วงเริ่มต้นและแสดงตัวเลือกในการบูตอูบุนตู แต่เมื่อคุณเลือกว่าไม่ได้บูต?

มีสองทางเลือกฉันคิดว่า:

  1. ใช้ตัวแก้ไขบรรทัด GRUB เพื่อแก้ไขตัวเลือกการบูต linux เพื่อโหลด linux อย่างถูกต้อง (จากนั้นเรียกใช้ grub-install เป็นรูทเพื่อตั้งค่าคอนฟิกที่ถูกต้องอย่างถาวร)
  2. บูตจากแท่ง USB ของ Ubuntu ติดตั้งพาร์ติชั่นดิสก์อูบุนตู chroot เข้าไปแล้วรันด้วงติดตั้ง

กรณีแรกควรง่ายกว่าถ้าคุณมี Ubuntu และมีฮาร์ดดิสก์เพียงตัวเดียวซึ่งในกรณีนี้เลือกตัวเลือก "การกู้คืน Ubuntu" และกด "e" เพื่อแก้ไข:

รายการควรมีลักษณะดังนี้:

insmod gzio
insmod part_msdos
insmod ext2
set root=('hd0,msdos0')
search --no-floppy --fs-uuid --set=root XXXXXX
linux /boot/vmlinuz-YYYYY root=UUID=XXXXXX ro recovery nomodeset
initrd /boot/initrd.img-YYYYY

ลบบรรทัด "ค้นหา" และแทนที่ "root = UUID = XXXXX" ในบรรทัด "linux" ด้วย "root = / dev / sda1" ลองและบู๊ตเครื่องนี้และหวังว่าหลังจากนั้นสักครู่มันจะให้เมนูการกู้คืนของ Ubuntu ซึ่งคุณควรมีตัวเลือกด้วงซึ่งควรติดตั้งด้วงใหม่อย่างถูกต้อง

มิฉะนั้นหรือถ้าคุณไม่อยากยุ่งกับด้วงโดยตรง (ซึ่งควรมีคำเตือนเรื่องสุขภาพให้ใช้ไม้ซีดี / USB ตามที่ระบุไว้ในhttps://help.ubuntu.com/community/Grub2/Installing#Reinstalling_GRUB_2


FYI เมื่อฉันเริ่มฉันไม่เห็นตัวเลือกการเริ่มต้นด้วง (อาจเป็นเพราะมันเพิ่งบูตเข้าสู่ Ubuntu โดยตรงเพราะเป็นระบบปฏิบัติการเดียว) ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ ฉันสิ้นสุดการสร้างดิสก์ซ่อมแซมการบูต
snowguy

ขอบคุณมาก! คำตอบของคุณช่วยให้ฉันรอดพ้นจากความเลวร้ายเมื่อฉันเปลี่ยน UUID ของ fstab และ Ubuntu ไม่สามารถเริ่มได้อีกต่อไป!
reexmonkey

0

ในกรณีของฉัน UUID ที่ติดตั้งด้วงนั้นแตกต่างจาก UUID ปัจจุบันของฉัน ( sudo blkid) สำหรับพาร์ติชัน Windows ของฉัน (ยืนยันใน grub.cfg) ฉันลองวิธีการต่าง ๆ ไม่สำเร็จ ในที่สุดฉันก็ติดตั้งพาร์ติชั่น Windows ด้วยตัวจัดการไฟล์และรันupdate-grubอีกครั้งและ UUID ได้รับการอัปเดตเรียบร้อยแล้วใน grub.cfg


โปรแกรมเรียกว่าและไม่ได้update-grub นี้ไม่ได้ออกจากที่เห็นได้ชัดว่าเป็นด้วงส่วนใหญ่เริ่มต้นด้วยคำสั่งgrub-update grub-...
Fa11enAngel

0

สิ่งที่ฉันทำแทนที่จะแก้ไข fstab และด้วง:

  1. ฉันสำรองไฟล์เหล่านั้นไว้ในการติดตั้ง Ubuntu สดใหม่ ( tar -cvf /somedir/boot.tar /etc/fstab /boot/grub/grub.cfg)
  2. กู้คืนจากข้อมูลสำรอง ( tar -xvpf /mnt/remotebk/full.tar)
  3. คัดลอกไฟล์ fstab ที่กู้คืน ( cp /etc/fstab /somedir/fstab.restored)
  4. เรียกคืนไฟล์บูตติดตั้งใหม่ของฉัน ( tar -xvpf /somedir/boot.tar -C /)
  5. รีบูตและมันทำงาน

ฉันใช้เครื่องเสมือน vmware ฉันทำกระบวนการนี้เพื่อย้ายเซิร์ฟเวอร์ linux หนึ่งตัวจากโฮสต์หนึ่งไปยังโฮสต์อื่น

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