ฉันเพิ่งลองทำsudo do_release_upgradeบนเซิร์ฟเวอร์ AWS EC2 Ubuntu 13.10 เพื่ออัปเกรดเป็น 14.04 ทุกอย่างเป็นไปด้วยดีจนกระทั่งฉันได้รับข้อความต่อไปนี้:

A new version of /boot/grub/menu.lst is available, but the version installed 
currently has been locally modified.

  What would you like to do about menu.lst?       

   * install the package maintainer's version
   * keep the local version currently installed
   * show the differences between the versions
   * show a side-by-side difference between the versions
   * show a 3-way difference between available versions
   * do a 3-way merge between available versions (experimental)
   * start a new shell to examine the situation

  <Ok>

แน่นอนฉันไม่ได้แก้ไข menu.lst ดังนั้นฉันจึงถือว่าการดัดแปลงในเครื่องนั้นเป็นของ Amazon ฉันจะกดตัวเลือก "เก็บเวอร์ชันท้องถิ่นที่ติดตั้งไว้ในปัจจุบัน" และหวังว่าจะดีที่สุด

แต่ทำไมฉันถึงได้รับข้อความนี้ และนี่คือวิธีที่ถูกต้องในการจัดการหรือไม่

answer

ปัญหานี้อาจเกิดจากปัญหาต่างๆ มากมาย ดังนั้นจึงไม่มีวิธีแก้ไขปัญหาเดียว ขั้นตอนเหล่านี้ควรใช้ได้กับ EC2

แหล่งที่มา:

ปัญหานี้เกิดจากข้อขัดแย้งของการเปลี่ยนแปลงในเครื่องและระยะไกลในการกำหนดค่าดั้งเดิมของGrub Grub legacy และ Grub2 ใช้ตำแหน่งการกำหนดค่าต่างกัน:

  • มรดกด้วง: /boot/grub/menu.lst
  • ด้วง2: /boot/grub/grub.cfg

สาเหตุ:

คุณอาจกำลังใช้ AMI ที่ได้รับการสนับสนุนจาก Amazon EBS อินสแตนซ์สร้างระบบไฟล์รูทจากอิมเมจพื้นฐานที่สร้างไว้ล่วงหน้า (สแนปชอต) การกำหนดค่าด้วงถูกเขียนในสแน็ปช็อต แต่รีจิสตรี UCF ไม่ได้รับการล้างอย่างถูกต้อง ซึ่งหมายความว่าคุณมีสแน็ปช็อตที่คิดว่าการกำหนดค่าmenu.lstนั้นได้รับการแก้ไขในเครื่อง ดูข้อมูลเพิ่มเติมได้ที่นี่: https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1485685

เหตุใด Ubuntu จึงใช้ UCF สำหรับด้วงอธิบายไว้ที่นี่: https://askubuntu.com/a/147079

วิธีแก้ปัญหา:

วิธีแก้ปัญหาทั่วไปวิธีหนึ่งที่ได้ผลคือการลบ menu.list และกำหนดค่าใหม่ เพื่อให้แน่ใจว่ารายการรีจิสทรี ucf และไฟล์การกำหนดค่าแก้ไขเป็นแฮชเดียวกัน

#Remove the menu.lst config.

sudo rm /boot/grub/menu.lst
# Generate a new configuration file. 
sudo update-grub-legacy-ec2 -y

#Upgrade the configuration
sudo apt-get dist-upgrade -qq --force-yes

วิธีที่สองคือการแก้ไขการกำหนดค่า UCF ให้ยอมรับการเปลี่ยนแปลงผู้ดูแลโดยอัตโนมัติ

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /var/run/grub/menu.lst
sudo apt-get dist-upgrade -qq --force-yes

ข้อจำกัดความรับผิดชอบ:

ปัญหานี้กว้างมากและกรณีการใช้งานจะส่งผลต่อโซลูชันที่จำเป็น หากเป็นไปได้ ขอแนะนำให้อัปเกรดเป็น grub2 Grub2 สามารถกำหนดค่าได้โดยไม่ต้องแก้ไขไฟล์ระบบ

นอกจากนี้ยังมีโซลูชันต่างๆ มากมายที่นำเสนอและรายงานปัญหาที่เปิดอยู่ในตัวติดตามอูบุนตู ฉันชอบที่จะเชื่อมโยงไปยังพวกเขาทั้งหมด แต่ไม่มีตัวแทน

ขอให้โชคดี :)

รุ่นของคำถามนี้: "ฉันมีเคอร์เนล upates อัตโนมัติใน ec2 และเพิ่งทำapt-get autoremove -yถึงแม้ว่าsudo update-grubฉันจะเห็นเฉพาะ3.13.0-48ในรายการ/boot/grub/menu.lstแต่ไม่อยู่ในเมล็ดที่ติดตั้ง ฉันเมาแค่ไหน"

คำตอบของฉัน: "อาจจะไม่เมา ในระบบ Ubuntu อื่น ๆmenu.lstไม่มีอยู่จริงและupdate-grubดูเหมือนว่าจะใส่การกำหนดค่า/boot/grub/grub.cfgแทน ฉันเดาว่านั่นmenu.lstเป็นสิ่งประดิษฐ์แปลก ๆ จาก Ubuntu AMI ของ EC2 หรือบางส่วนโต้ตอบกับบรรจุภัณฑ์หรือการจัดการการกำหนดค่าในเครื่อง "

โดยส่วนตัว ในสถานที่ของคุณ ฉันจะ "แสดงความแตกต่างระหว่างเวอร์ชันต่างๆ" จดบันทึกอย่างระมัดระวังว่าการเปลี่ยนแปลงคืออะไร จากนั้นจึงทดลองกับความแตกต่างใหม่ในอินสแตนซ์ AWS "การพัฒนา" ถ้าฉันระมัดระวังเป็นพิเศษ ฉันจะอ่าน man page สำหรับการเปลี่ยนแปลงที่เป็นปัญหา (อาจไม่ใช่สำหรับ menu.lst แต่ซอฟต์แวร์อื่นบางตัว เช่น เคอร์เนล หรืออะไรก็ตามจริงๆ) เพื่อค้นหาว่ามีอะไรเปลี่ยนแปลง .

อีกวิธีหนึ่ง คุณสามารถโคลนเครื่องเสมือนนี้ ทำการอัพเกรด ดูว่าเกิดอะไรขึ้น และหากล้มเหลว คุณจะทำลาย VM ใหม่ และเริ่มกระบวนการอีกครั้งด้วยตัวเลือกอื่น เครื่องเสมือนนั้นยอดเยี่ยมด้วยเหตุนี้เพียงอย่างเดียว

ฉันเพิ่งเจอ "ปัญหา" เดียวกันกับ VPS จาก OVH
ในกรณีของฉัน (และอื่น ๆ อีกมากมายที่ฉันพบในขณะที่ Googling) การเปลี่ยนแปลงเพียงอย่างเดียวคือช่องว่าง
ฉันไม่รู้ว่ามันมาจากไหน แต่ถ้าคุณเลือกshow the differences between the versionsและคำตอบคือNo non whitespace changes detectedใช้เวอร์ชันผู้ดูแล

ข้อผิดพลาดยังคงเกิดขึ้นกับอินสแตนซ์ Ubuntu 18.04 EC2 ของฉัน และดูเหมือนว่าจะเกี่ยวข้องเมื่อเคอร์เนลอัพเกรดจาก 4.x เป็น 5.x

ขั้นตอนที่ใช้ได้ผลสำหรับฉัน ซึ่งคล้ายกับ @menzo:

  1. เมื่อได้รับแจ้งระหว่าง$sudo apt update; sudo apt upgradeการแก้ไข ฉันเก็บเวอร์ชันดั้งเดิมไว้
  2. สำรอง: sudo mv -v /boot/grub/menu.lst.bkp
  3. สร้างใหม่และกด y: sudo update-grub-legacy-ec2

Searching for GRUB installation directory ... found: /boot/grub Searching for default file ... found: /boot/grub/default Testing for an existing GRUB menu.lst file ...

Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) y Searching for splash image ... none found, skipping ... Found kernel: /boot/vmlinuz-5.4.0-1054-aws Found kernel: /boot/vmlinuz-5.3.0-1032-aws Found kernel: /boot/vmlinuz-4.15.0-1065-aws Updating /boot/grub/menu.lst ... done

  1. ตรวจสอบ: sudo cat /boot/grub/menu.lst
  2. sudo reboot

เริ่มแรกในคอนโซล AWS EC2

0/2 Checks passed

ซึ่งได้รับการแก้ไขหลังจาก 5-10 นาที

ขอให้โชคดี! มันน่ารำคาญมากเพราะการอัปเกรดไม่ใช่แบบอัตโนมัติและฉันมีอินสแตนซ์เก่าจำนวนมาก...

ตัวเลือกของคุณ

  • show the differences between the versions

แล้ว

  • install the package maintainer's version

หรือ

  • keep the local version currently installed

ยังไงก็วิ่งได้

ls -hl /boot/grub/menu.lst*
diff --suppress-common-lines /boot/grub/menu.lst*