วิธีแก้ไข 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.