تعمیر گراب: تفاوت بین نسخه‌ها

از ویکی فارسی اوبونتو
پرش به: ناوبری، جستجو
(ویکی سازی)
سطر ۱: سطر ۱:
ابتدا سیستم را با یک دیسک زنده گنو/لینوکس [[Boot]] کرده و ترمینال را باز نمایید.
+
اگر پس از نصب [[Ubuntu|اوبونتو]]، تغییراتی در ترتیب دیسک‌ها بدهید یا سیستم‌عامل‌های غیراستانداری مانند [[Windows|ویندوز]] را روی رایانه‌ی خود نصب کنید، ممکن است [[grub|گراب]] خود را از دست بدهید. در چنین مواردی باید گراب را دوباره نصب کرده یا به اصطلاح تعمیر کنید.
برای انجام عملیات [[chroot]] لازم است بدانید که پارتیشن / (root) توزیع خود را در کجا نصب کرده‌اید، برای نمایش یک لیست از پارتیشن‌های موجود از fdisk استفاده کنید:
 
  
<pre>sudo fdisk -l</pre>
+
=پیش‌نیازها=
 +
* [[Live Media|رسانهٔ زندهٔ]] اوبونتوی سازگار با [[Arch|معماری]] و نگارش گراب اوبونتویی که روی دیسک شماست.
  
پس از وارد کردن دستور فوق در صورتی که رمز عبور سوال شد، آن را وارد نمایید، عموما در دیسک‌های زنده رمزعبور خواسته نمی‌شود و در صورت نیاز در هنگام لاگین به سیستم یا باز کردن ترمینال رمز عبور دیسک زنده به شما نمایش داده خواهد شد.
+
=روش کار=
 +
ابتدا رایانه را با رسانهٔ زنده [[Boot|راه‌اندازی]] کرده و در نشست زنده، [[Termianl|پایانه]] را بگشایید.
  
در خروجی دستور فوق، پارتیشنی که به عنوان / (root) درنظر گرفته بودید را شناسایی نمایید، این نام باید مشابه <code>dev/sdXY/</code> باشد. X: یک حرف مانند a یا b و… Y: یک عدد. برای مثال پارتیشن روت ما dev/sda5/ است. حال پارتیشن / (root) را mount میکنید:
+
==سوار کردن پارتیشن‌ها==
 +
لازم است بدانید که پارتیشن ریشه را در کجا نصب کرده‌اید. دستور [[fdisk]] می‌تواند در این زمینه به شما کمک کند.
 +
<pre>$ sudo fdisk -l</pre>
  
<pre>sudo mount /dev/sda5 /mnt</pre>
+
فرض می‌کنیم ریشه‌ی اوبونتو در پارتیشن <code>dev/sda1</code> باشد. این پارتیشن را روی [[File System|سامانه‌پروندهٔ]] توزیع زنده [[mount|سوار]] می‌کنیم.
 +
<pre>$ sudo mount /dev/sda1 /mnt</pre>
  
اگر در هنگام نصب توزیع خود، پارتیشن مجزایی برای boot/ در نظر گرفته بوده‌اید با دستور زیر boot/ را هم mount نمایید:
+
اگر هنگام نصب توزیع خود، پارتیشن جدایی (فرض می‌شود <code>dev/sda2</code>) برای boot در نظر گرفته بوده‌اید با دستور زیر boot را هم سوار نمایید:
 +
<pre>$ sudo mount /dev/sda2 /mnt/boot</pre>
  
<pre>sudo mount /dev/sda6 /mnt/boot</pre>
+
برای شناخت صحیح پارتیشن ها در گراب باید شاخه‌های مجازی dev و proc را از توزیع زنده‌ای که هم‌اکنون در حال کار با آن هستیم، روی سامانه‌پرونده‌ی سیستم اصلی خود سوار کنیم:
 +
<pre>
 +
$ sudo mount --bind /dev/ /mnt/dev
 +
$ sudo mount --bind /proc /mnt/proc
 +
</pre>
  
در دستور فوق فرض بر این است که <code>dev/sda6/ </code> پارتیشن boot میباشد. حال با ls یک لیست از شاخه mnt بگیرید تا اطمینان پیدا کنید که عملیات mount صحیح اجرا شده و آماده سایر مراحل هستید:
+
==نصب گراب==
 +
حال باید گراب را روی دیسک اصلی خود که راه‌انداز [[Bios|بایاس]] به [[MBR|رکورد راه‌اندازی اصلی]] آن اشاره می‌کند، نصب کرد. با فرض این که <code>sda</code> دیسک اصلی شماست:
 +
<pre>$ sudo grub-install --root-directory=/mnt/ /dev/sda</pre>
  
<pre>ls /mnt</pre>
+
==رفتن به محیط اوبونتوی اصلی==
 +
سپس به وسیلهٔ [[chroot]] به توزیع اصلی نصب‌شدهٔ خود وارد می‌شویم:
 +
<pre>$ sudo chroot /mnt</pre>
  
خروجی باید مشابه زیر باشد:
+
===به‌روز رسانی گراب===
 +
حال باید فهرست گراب را بر اساس آن‌چه روی دیسک وجود دارد به‌روز رسانی کرد:
 +
<pre># update-grub</pre>
  
<pre>bin  etc  initrd.img.old  media  proc  sbin  tmp  vmlinuz
+
==خروج==
boot home lib mnt   root srv  usr  vmlinuz.old
+
سپس با زدن دستور <code>exit</code> یا فشردن دکمه‌های ctrl+d از محیط chroot خارج می‌شویم. پس از آن باید پارتیشن‌های سوار شده را پیاده کرد:
dev  initrd.img  lost+found  opt  run  sys  var</pre>
+
<pre>$ sudo umount /mnt</pre>
  
همینکار را برای شاخه boot/ تکرار نمایید:
+
==پایان==
 
+
نهایتا را راه‌اندازی مجدّد کنید و از با خارج کردن رسانهٔ زنده، از طریق گراب به اوبونتوی اصلی خود وارد شوید.
<pre>ls /boot</pre>
 
 
 
خروجی مشابه زیر دریافت خواهید کرد:
 
 
 
<pre>abi-3.13.0-44-generic
 
abi-3.13.0-45-generic
 
vmlinuz-3.13.0-45-generic
 
...</pre>
 
 
 
حال باید شاخه های زیر را برروی شاخه مشابه در mnt به صورت bind‌ سوار ( mount ) نمایید:
 
 
 
<pre>/dev
 
/dev/pts
 
/proc
 
/sys</pre>
 
 
 
انجام عملیات Mount به همراه پارامتر bind باعث می‌شود محتویات شاخه های فوق در هر دو محل به صورت یکسان قابل دسترس باشند. نحوه mount کردن به صورت زیر خواهد بود:
 
 
 
<pre>sudo mount –bind foo bar</pre>
 
 
 
یا به صورت زیر:
 
 
 
<pre>sudo mount -B foo bar</pre>
 
 
 
در نتیجه لازم است شاخه های مذکور را به صورت ذکر شده mount نمایید، برای مثال نحوه مانت شاخه dev/ به صورت زیر خواهد بود:
 
 
 
<pre>sudo mount -B /dev /mnt/dev</pre>
 
 
 
برای راحتی و سرعت بخشیدن به کار میتوان از یک حلقه for استفاده کرد. کد زیر هر ۴ شاخه مذکور را در محل صحیح mount خواهد کرد، این دستور را در یک خط وارد و اجرا نمایید:
 
 
 
<pre>for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done</pre>
 
 
 
حال با دستور زیر شاخه root را تغییر دهید (chroot).
 
 
 
<pre>sudo chroot /mnt</pre>
 
 
 
دستور زیر فایل پیکربندی grub را برای سیستم ایجاد خواهد کرد:
 
 
 
<pre>sudo update-grub</pre>
 
 
 
حال برای نصب مجدد grub در [[MBR‌]] باید بدانید سیستم از کدام Disk برای بوت شدن استفاده میکند. برای این منظور میتوانید مجددا از fdisk -l‌ استفاده نمایید. آدرس دیسک باید به صورت زیر باشد:
 
 
 
<pre>/dev/sdX</pre>
 
 
 
که x یک حرف مانند a یا b و یا … می‌باشد، یعنی آدرسی مشابه زیر:
 
 
 
<pre>/dev/sda</pre>
 
 
 
حال با دستور زیر گراب را بر MBR دیسک مدنظر نصب نمایید:
 
 
 
<pre>sudo grub-install /dev/sda</pre>
 
 
 
سپس با دستور exit یا فشردن ctrl+d از chroot خارج شوید. حال نوبت آن است که پارتیشن و شاخه‌های mount شده را umount نمایید، به این منظور دستور زیر را در یک خط وارد و اجرا نمایید:
 
 
 
<pre>for i in /dev/pts /dev /proc /sys; do sudo umount /mnt$i; done</pre>
 
 
 
در صورتی که پارتیشن boot/ را مجزا ایجاد و mount کرده بودید آن را umount نمایید، سپس mnt/ را umount کنید:
 
 
 
<pre>sudo umount /mnt</pre>
 
 
 
نهایتا سیستم را reboot نمایید:
 
 
 
<pre>sudo shutdown -r now</pre>
 

نسخهٔ ‏۱۲ تیر ۱۳۹۴، ساعت ۰۱:۳۵

اگر پس از نصب اوبونتو، تغییراتی در ترتیب دیسک‌ها بدهید یا سیستم‌عامل‌های غیراستانداری مانند ویندوز را روی رایانه‌ی خود نصب کنید، ممکن است گراب خود را از دست بدهید. در چنین مواردی باید گراب را دوباره نصب کرده یا به اصطلاح تعمیر کنید.

پیش‌نیازها

روش کار

ابتدا رایانه را با رسانهٔ زنده راه‌اندازی کرده و در نشست زنده، پایانه را بگشایید.

سوار کردن پارتیشن‌ها

لازم است بدانید که پارتیشن ریشه را در کجا نصب کرده‌اید. دستور fdisk می‌تواند در این زمینه به شما کمک کند.

$ sudo fdisk -l

فرض می‌کنیم ریشه‌ی اوبونتو در پارتیشن dev/sda1 باشد. این پارتیشن را روی سامانه‌پروندهٔ توزیع زنده سوار می‌کنیم.

$ sudo mount /dev/sda1 /mnt

اگر هنگام نصب توزیع خود، پارتیشن جدایی (فرض می‌شود dev/sda2) برای boot در نظر گرفته بوده‌اید با دستور زیر boot را هم سوار نمایید:

$ sudo mount /dev/sda2 /mnt/boot

برای شناخت صحیح پارتیشن ها در گراب باید شاخه‌های مجازی dev و proc را از توزیع زنده‌ای که هم‌اکنون در حال کار با آن هستیم، روی سامانه‌پرونده‌ی سیستم اصلی خود سوار کنیم:

$ sudo mount --bind /dev/ /mnt/dev
$ sudo mount --bind /proc /mnt/proc

نصب گراب

حال باید گراب را روی دیسک اصلی خود که راه‌انداز بایاس به رکورد راه‌اندازی اصلی آن اشاره می‌کند، نصب کرد. با فرض این که sda دیسک اصلی شماست:

$ sudo grub-install --root-directory=/mnt/ /dev/sda

رفتن به محیط اوبونتوی اصلی

سپس به وسیلهٔ chroot به توزیع اصلی نصب‌شدهٔ خود وارد می‌شویم:

$ sudo chroot /mnt

به‌روز رسانی گراب

حال باید فهرست گراب را بر اساس آن‌چه روی دیسک وجود دارد به‌روز رسانی کرد:

# update-grub

خروج

سپس با زدن دستور exit یا فشردن دکمه‌های ctrl+d از محیط chroot خارج می‌شویم. پس از آن باید پارتیشن‌های سوار شده را پیاده کرد:

$ sudo umount /mnt

پایان

نهایتا را راه‌اندازی مجدّد کنید و از با خارج کردن رسانهٔ زنده، از طریق گراب به اوبونتوی اصلی خود وارد شوید.