تبلیغات
NILADIC
منوی اصلی

چکیده

نکته مهم برای کاربران (Wubi (windows Ubuntu: به روز رسانی گراب۲ در بهار ۲۰۱۰ یک باگ در فرمت ntfs بوجود آورد که موجب ناتوانی Wubi در بوت می‌شد. راه حل این مشکل بوت بوسیله آگوستینو رُسو پست و اعلام شد که آن را می‌توان در LaunchPad Bug Report #477169, Post 210 یافت. ماژولی که سبب بوجود آمدن خطا می‌شد با فیکس و جایگزین کردن فایل «wubildr» در ویندوز این مسأله را بصورت پایداری حل کرد.میرفرا هم دستورالعمل‌های واضحی را در مورد چگونگی حل این مشکل در لینک زیر در اختیار گذاشته است.

چگونگی بازیابی بوت‌لودر ubuntu/xp/vista/7

پیام خطا «Fix Symbol 'grub-puts' Not Found» به دنبال به‌روز رسانی از کارمیک به لوسید: http://www.webupd8.org/2010/05/fix-symbol-grubputs-not-found-when.html

مقدمه

من این راهنما را نوشتم تا یک سری اطلاعات پایه‌ای را در مورد گراب۲ ارائه بدهد. این راهنما برای کاربرانی است که امکان دارد با ویرایش پایه‌ای menu.lst گراب اصلی(Grub Legacy) آشنایی داشته و متعجب باشند که این موضوع چگونه روی گراب۲ منتقل شده. نسخه واقعی گراب۲ در ابونتو ۹.۱۰(کارمیک کوالا) ۱.۹۷~بتا است؛ در ابونتو ۱۰.۰۴ نسخه لوسید لینکس۱.۹۸ است. برای حفظ فلسفه «انتشارهای پایدارِ» ابونتو، ۱.۹۷~بتا به عنوان نسخه رسمی در ۹.۱۰/کارمیک باقی خواهد ماند و به ۱.۹۸ ارتقا پیدا نخواهد کرد. در این راهنما منظور از تمام ارجاع‌ها به گراب۲ به ۱۰.۰۴/لوسید نسخه ۱.۹۸ خواهد بود، با تغییراتی عمده که مورد ملاحظه قرار گرفته است.

  • Grub 2 will be the default in Ubuntu 9.10, Karmic Koala but the plan is not to convert over previous Grub legacy installations to Grub 2.
  • Official Announcement/Story

StartUp-Manager گراب۲ رو پشتیبانی می‌کند ولی همه تنظیمات در دسترس نیستند. دو موردی که زیاد استفاده می‌شوند، به هر حال، این‌ها هستند: گذاشتن هسته/سیستم‌عامل پیش‌فرض و تعیین ثانیه شمار منو. طرح‌هایی برای StartUp-Manager۲ وجود دارند که فقط برای گراب۲ کار می‌کنند اما به گفته سازنده‌اش هنوز در حال توسعه هستند. برای دیدن راهنمای نصب و اجرای StartUp-Manager، لینک StartUpManager community doc رو ببینید یا پستی که در فروم مستقر است:

http://ubuntuforums.org/showthread.php?t=818177

در این زمان مستند سازی رسمی در حال ساخته شدن است، که تا حدی دلیل ایجاد این پست نیز هست. ان‌شاءالله در آینده نزدیک مستند کاملتر و جامع‌تری از سوی توسعه دهندگان و داوطلبین تهیه خواهد شد. در مورد راهنماهای موجود، من لینک تعدادی از منابع بهتر را در اختیار گذاشته‌ام.

  • برای خطایابی و تغییر دادن منوی گراب، این مهم است که شما بدانید در حال استفاده از چه نسخه‌ای هستید.(Grub legacy, 0.97; Grub 2 in Karmic 1.97~beta4; Grub 2 in Lucid 1.98). برای اطمینان از نسخه گراب سیستم خود، این دستور رو اجرا کنید:

grub-install -v

که باید چیزی شبیه این تولید کند:

  • drs305@mycomputer:~$ grub-install -v
    grub-install (GNU GRUB 1.97~beta4) 

تفاوت ها در نگاه اول:گراب در مقابل گراب۲

در اولین باری که سیستم بوت می‌شود، برای کاربری که منوی بوت را می‌بیند اختلاف قابل ملاحظه‌ای وجود ندارد. یک استثناء هم وجود دارد و آن اینکه اگر یک نصب کامل انجام شود و هیچ سیستم‌عامل دیگری وجود نداشته باشد. در این حالت،‌ گراب ۲ مستقیماً به صفحه لوگین بوت می‌شود یا اینکه بدون نشان دادن منو به دستکتاپ می‌رود. تفاوت‌های اساسی دیگر:

  • نبود فایل «boot/grub/menu.lst/». این فایل با «boot/grub/grub.cfg/» جایگزین شده است.
    • برای نشان دادن منوی مخفی هنگام بوت باید دگمه شیف را نگه داشت (قبلاً در گراب دگمه ESC بود).
  • هنگام آماده کردن گراب دیگر «find /boot/grub/stage1» وجود ندارد. Stage 1.5 هم حذف شده است.
  • فایل منوی اصلی، «boot/grub/grub.cfg/» قرار نیست ویرایش شود حتی بوسیله روت.
  • هرگاه یک به‌روز رسانی باشد، یک هسته اضافه/حذف شود یا کاربر دستور «update-grub» رو اجرا کند، فایل «grub.cfg» بازنویسی می‌شود.
  • بطور معمول کاربر می‌تواند از فایل «etc/grub.d/40_custom/» برای اضافه کردن مدخل‌های خود به منوی گراب استفاده کند. این فایل بصورت اتوماتیک بازنویسی نمی‌شود.
  • فایل پیکربندی اصلی برای تغییر دادن تنظیمات نمایش منو فایل «etc/default/grub/» است.
  • فایل‌های متعددی برای پیکربندی منو («etc/default/grub/» که در بالا ذکر شد) وجود دارند و همه سکریپت‌هایی که در پوشه /etc/grub.d/ هستند.
  • سیستم‌عامل‌های دیگر نظیر ویندوز، قاعدتاً بصورت اتوماتیک شناخته و به منو اضافه می‌شوند.
  • تا زمانی که دستور «update-gurb» اجرا نشود هیچ تغییری در فایل‌های پیکربندی تأثیر گذار نخواهد بود.

* در سراسر این راهنما برای به روزرسانی منوی گراب۲، دستور «sudo update-grub» استفاده خواهد شد. در‌واقع «sudo update-grub» دستور «grub-mkconfig -o /boot/grub/grub.cfg» را اجرا می‌کند و آن نیز به نوبه خود چندین اسکریپت را اجرا کرده و حاصل آن‌ها را در boot/grub/grub.cfg/ بصورت واحد قرار می‌دهد که تعیین می‌کند چه چیزی هنگام بوت بر روی صفحه نمایش نشان داده شود. از آنجا که توسعه دهندگان گراب۲ تمایلی به حذف update-grub stub ندارند، آن برای سادگی و استفاده راحت بکار برده می‌شود.

بهبودها

عمده‌ترین بهبودی‌های گراب۲ نسبت به گراب اصلی شامل:

  • ساختار فایل پیکربندی جدید
  • پشتیبانی اسکریپتی، شامل عبارت‌های شرطی و توابع
  • بارگذاری ماژول پویا
  • حالت نجات Rescue mode
  • قالب‌ها – در حال توسعه
  • پشتیبانی از منوی بوت گرافیکی و قابلیت سپلش بهبود یافته
  • بوت سی‌دی زنده ابونتو و ایمیج‌های ISO دیگر مستقیماً از هارد درایو
  • پشتیبانی از پلتفورم‌های Non-X86 (مثل PowerPC)
  • پشتیبانی از UUIDهای عمومی (نه فقط ابونتو)
  • بهبود یافته از نظر بین‌المللی، نظیر پشتیبانی از کارکترهای غیر ASCII

بوت کردن گراب

گراب۲ قبل از سیستم‌عامل بارگذاری می‌شود. کامپوننت‌های ماژولار آن در هنگام یک نیاز پایه بارگذاری می‌شوند. رفتار نمایش منو بطور کلی بوسیله تنظیماتی که در etc/default/grub/ هست تعیین می‌شود. برای راهنمائی مدخل خاص و قالبندی بخش «گراب۲ فایل‌ها و انتخاب‌ها» را ببینید. انتخاب‌های اصلی برای نمایش منو این‌ها هستند:

  • Initial Default
    • اگر گراب۲ سیستم‌عامل دیگری را تشخیص ندهد بطور مستقیم به سیستم‌عامل پیش‌فرض بوت می‌شود و منویی نشان داده نخواهد شد. اگر سیستم‌عامل دیگری تشخیص داده شود آنگاه منو نشان داده می‌شود.
  • Timed display
    • تأخیر پیش‌فرض ۱۰ ثانیه است. اگر داده ورودی از کاربر دریافت نشود، گراب۲ به مدخل پیش‌فرض بوت می‌شود.
    • می‌توان با فشار دادن هر کلیدی شمارنده معکوس را متوقف ساخت. آنگاه کاربر باید بصورت دستی یک از گزینه‌ها را انتخاب کند.
    • می‌توان با فشار دادن هر کلیدی شمارنده معکوس را متوقف ساخت. آنگاه کاربر باید بصورت دستی یک از گزینه‌ها را انتخاب کند.
      • مدخل پیش‌فرض بوسیله =DEFAULT که در etc/default/grub/ تنظیم شده، مشخص می‌شود. اولین مدخل منو 0 (صفر) است.
  • Hidden
    • کاربر می‌تواند با پایین نگه داشتن کلید شیف (تا زمانی که منو نمایش داده می‌شود) در فرایند بوت وقفه ایجاد کند.
    • گراب۲ در هنگام بوت به دنبال سیگنال دیپرس کلید شیف می‌گردد. اگر کلید فشاد داده شده باشد یا گراب۲ نتواند وضعیت کلید را تشخیص دهد، منو نمایش داده می‌شود. توجه: چک کردن وضعیت کلید شیف در حال حاضر در یک عبارت شرطی در فایل etc/grub.d/30_0s-prober قرار دارد و امکان دارد تحت شرایط certain کار نکند.
    • مقدار زمانی که صفحه نمایش سیاه اما برای نمایش آماده است، بوسیله یک تنظیم که در etc/default/grub/ قرار دارد مشخص می‌شود.
    • برای در اختیار قرار گذاشتن بازخورد دیداری هنگامی که شمارنده معکوس کار می‌کند، می‌توان ثانیه‌شمار را در صفحه نمایش نشان داد
    • در پایان ثانیه‌شمار مدخل پیش‌فرضی که در etc/default/grub/ تعیین شده، انتخاب می‌شود
  • Saved
    • اگر اختیار پیش‌فرض بصورت «saved» باشد و کاربر هیچ ورودی را ندهد، آخرین هسته/سیستمی که بصورت موفقیت آمیز بوت شده باشد، انتخاب شده و اجرا می‌شود.
    • گراب۲ برخلاف گراب، مدخل ذخیره شده (saved) را بصورت یک رشته (string) نگاه می‌دارد، نه بصورت یک عدد که نشان دهنده جایگاهش در منو است. در گراب۲ نتیجه استوارتر است. برای مثال: اگر مدخل اول (هسته ۱۵-) بخاطر یک بروز رسانی تبدیل به مدخل دوم شود بازهم مدخل ذخیره شده معتبر است، گرچه جایگاهش در منو تغییر کرده است.

گراب۲ فایل‌ها و انتخاب‌ها

بسیاری از فایل‌های موجود در boot/grub/ بوسیله کاربرهای Grub Legacy قابل تشخیص نخواهند بود. مخصوصاً گروه مهمی که فایل‌های mod.* هستند. گراب۲ بصورت ماژولار است و این فایل‌ها بوسیله بارگذاربوتِ گراب بطور ضروری، بارگذاری می‌شوند. عمده تنظیمات قابل پیکربندی گراب۲ توسط کاربر در فایل etc/default/grub/ و در فایل‌های موجود در شاخه etc/grub.d/ قرار دارند. زمانی که update-grub اجرا می‌شود نتیجه‌ها در فایل boot/grub/grub.cfg/ قرار داده می‌شود.

  • boot/grub/grub.cfg/
  • * این فایل اصلی گراب۲ است و جایگزین فایل boot/grub/menu.lst/ در گراب Legacy. این فایل حاوی اطلاعات منوی گراب است اما برخلاف فایل menu.lst گراب Legacy، فایل gurb.cfg قرار نیست ویرایش شود.
    • هر بخش (BEGIN ###) بصورت واضح مشخص شده و مرجع فایلی که در /etc/grub.d/ قرار دارد و اطلاعات از آن تولید شده را نشان می‌دهد.
    • grub.cfg بوسیله اجرا کردن دستور «update-grub» به عنوان root به روز می‌شود.
    • بصورت پیش‌فرض هرگاه دستور «update-grub» اجرا شود، این فایل «فقط خواندنی» می‌شود. این کار هم در این راستا است که این فایل نباید بصورت دستی ویرایش شود. اگر باید این فایل ویرایش شود، دستورالعمل‌های لازم برای این کار در قسمت ۲ آمده است.
  • نمونه grub.cfg شامل ویندوز و یک مدخل مانوال است (41_srcd):

 # DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
set default="0"
if [ ${prev_saved_entry} ]; then
  set saved_entry=${prev_saved_entry}
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi
function savedefault {
  if [ -z ${boot_once} ]; then
    saved_entry=${chosen}
    save_env saved_entry
  fi
}
function recordfail {
  set recordfail=1
  if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=640x480
  insmod gfxterm
  insmod vbe
  if terminal_output gfxterm ; then true ; else
    # For backward compatibility with versions of terminal.mod that don't
    # understand terminal_output
    terminal gfxterm
  fi
fi
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
set locale_dir=($root)/boot/grub/locale
set lang=en
insmod gettext
if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.32-16-generic' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        linux   /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
        initrd  /boot/initrd.img-2.6.32-16-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-16-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        echo    'Loading Linux 2.6.32-16-generic ...'
        linux   /boot/vmlinuz-2.6.32-16-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-2.6.32-16-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-14-generic' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        linux   /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro   quiet splash
        initrd  /boot/initrd.img-2.6.32-14-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-14-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        echo    'Loading Linux 2.6.32-14-generic ...'
        linux   /boot/vmlinuz-2.6.32-14-generic root=UUID=444539ba-ab9e-4028-94f5-c1a86b5ec7c1 ro single
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-2.6.32-14-generic
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 444539ba-ab9e-4028-94f5-c1a86b5ec7c1
        linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" {
    set root=(hd0,1)
    chainloader +1
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
menuentry "Jaunty 2.6.28-15-custom" {
    saved_entry=${chosen}
    save_env saved_entry
    set root=(hd0,8)
    linux    /boot/vmlinuz-2.6.28-15-custom root=UUID=48e03255-22b3-488b-ae7e-9dbe4e2beac7 ro  quiet splash
    initrd    /boot/initrd.img-2.6.28-15-custom
}
menuentry "SystemRescue" {
    saved_entry=${chosen}
    save_env saved_entry
        set root=(hd0,6)
        linux   /sysrcd/rescuecd subdir=sysrcd setkmap=us
        initrd  /sysrcd/initram.igz
}
### END /etc/grub.d/40_custom ###

  • etc/default/grub/
    • این فایل حاوی اطلاعاتی است که قبلاً در قسمت بالا menu.lst گراب Legacy قرار داشت، همراه آیتم‌هایی که در انتهای خط کرنل قرار دارند. آیتم‌های درون این فایل می‌توانند بوسیله کاربر با دسترسی ادمین ویرایش شوند.

If you change this file, run 'update-grub' afterwards to update #
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1

  • GRUB_DEFAULT – مدخل پیشفرض منو را تنظیم می‌کند. مدخل‌ها می‌توانند بصورت عددی یا «saved» باشند.
    • GRUB_DEFAULT=0 – مدخل پیشفرض منو را بوسیله جایگاه منو تعیین می‌کند. همانند Grub Legacy اولین مدخل منو در grub.cfg عدد صفر است، دومی عدد یک و الاآخر.
    • GRUB_DEFAULT=saved – (گراب ۱.۹۸) این حالت دستورهای «grub-reboot» و «grub-set-default» را فعال می‌کند.
      • این تنظیم به دستورهایی که شرح آن‌ها در ادامه می‌آید، اجازه می‌دهد که سیستم‌عامل پیشفرض را تعیین کنند. دیگر سیستم‌عامل پیشفرض فقط بوسیله انتخاب یک سیستم‌عامل از منو تعیین نمی‌شود.
      • grub-set-default. مدخل پیشفرض را تعیین می‌کند تا زمانی که تغییر کند.
        • قالب دستور به این صورت است «sudo grub-set-default X» که X مشخص کننده جایگاه مدخل منو است (از عدد صفر شروع می‌شود) یا متن دقیق مدخل منو. برای مثال: «sudo grub-set-default 3» یا «sudo grub-set-default "Ubuntu, Linux 2.6.32-15-generic"»
        • برای فهمیدن عدد مدخل (که از صفر شروع می‌شود) یا متنی که در حال حاضر انتخاب شده دستور «grep menuentry /boot/grub/grub.cfg» را اجرا کنید.
      • grub-reboot این دستور مدخل پیشفرض را فقط برای بوت بعدی تنظیم می‌کند. قالب دستور همانند «grub-set-default» است (قسمت بالا را ببیند).
      • برای یک نمونه که چگونه می‌شود اختیار «saved» را در منو دلخواه فعال کرد بخش «Custom User Entries» را ببینید.
    • "GRUB_DEFAULT="xxxx همچنین می‌توان عیناً از مدخل منو استفاده کرد (همراه علامت کتیشن). در این حالت جایگاه مدخل در منو اهمیتی ندارد.

مثال: "GRUB_DEFAULT="Ubuntu, Linux 2.6.31-9-generic

  • GRUB_SAVEDEFAULT=true اگر مقدار آن true باشد، این تنظیم بصورت اتوماتیک آخرین سیستم‌عاملی که از منو انتخاب شده است را به عنوان مدخل پیشفرض تعیین می‌کند. برای انتخاب سیستم‌عامل پیشفرض لازم نیست هیچ دستوری اجرا شود. برای اینکه این روند کار کند باید عبارت GRUB_DEFAULT برابر «saved» قرار داده شود.
  • GRUB_TIMEOUT=5 فرقی با گراب Legacy ندارد. این عدد تعداد ثانیه‌هایی است که بعد از آن مدخل پیشفرض بصورت اتوماتیک بوت می‌شود.

کمک بیشتر

سوالات خود را درباره این راهنما اینجا مطرح کنید.

منابع

http://ubuntuforums.org/showthread.php?t=1195275