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

از ویکی فارسی اوبونتو
پرش به: ناوبری، جستجو
(پایان)
 
(۴۰ نسخه‌ٔ میانی ویرایش شده توسط ۶ کاربر نشان داده نشده)
سطر ۱: سطر ۱:
ابتدا سیستم را با یک دیسک زنده گنو/لینوکس Boot کرده و ترمینال را باز نمایید.
+
اگر پس از نصب [[Ubuntu|اوبونتو]]، تغییراتی در ترتیب دیسک‌ها بدهید یا سیستم‌عامل‌های غیراستانداری مانند [[Windows|ویندوز]] را روی رایانه‌ی خود نصب کنید، ممکن است [[grub|گراب]] خود را از دست بدهید. در چنین مواردی باید گراب را دوباره نصب کرده یا به اصطلاح تعمیر کنید.
برای انجام عملیات chroot لازم است پارتیشن / (root) که توزیع خود را بر  روی آن نصب کرده‌ایم بدانیم، برای نمایش یک لیست از پارتیشن‌های موجود از fdisk استفاده می‌کنیم:
 
  
<pre>sudo fdisk -l</pre>
+
=پیش‌نیازها=
 +
* [[Live Media|رسانهٔ زندهٔ]] اوبونتوی سازگار با [[Arch|معماری]] و نگارش گراب اوبونتویی که روی دیسک شماست.
  
پس از وارد کردن دستور فوق در صورتی که رمز عبور سوال شد، آن را وارد نمایید، عموما در دیسک‌های زنده رمزعبور خواسته نمی‌شود و در صورت نیاز در هنگام لاگین به سیستم یا باز کردن ترمینال رمز عبور دیسک زنده به شما نمایش داده خواهد شد.
+
=روش کار=
  
در خروجی دستور فوق، پارتیشنی که به عنوان / (root) درنظر گرفته بودید را شناسایی نمایید، این نام باید مشابه dev/sdXY/ باشد.
+
{{نکته| اگر کار با محیط متنی برای شما دشوار است به قسمت پایانی مقاله '''روش‌های جایگزین''' مراجعه کنید. }}
  
X: یک حرف مانند a یا b و…
+
ابتدا رایانه را با رسانهٔ زنده [[Boot|راه‌اندازی]] کرده و در نشست زنده، [[Terminal emulator|شبیه‌ساز پایانه]] را بگشایید.
Y: یک عدد
 
  
برای مثال پارتیشن روت ما dev/sda5/ است.
+
==سوار کردن افرازها==
 +
لازم است بدانید که [[Partition|افراز]] ریشه را در کجا نصب کرده‌اید. دستور [[fdisk]] می‌تواند در این زمینه به شما کمک کند.
  
حال پارتیشن / (root) را mount میکنیم:
+
{{bc|
 +
$ sudo fdisk -l
 +
}}
  
<pre>sudo mount /dev/sda5 /mnt</pre>
+
فرض می‌کنیم ریشه‌ی اوبونتو در افراز  {{ic|/dev/sda3}} باشد. این افراز را روی [[File System|سامانه‌پروندهٔ]] توزیع زنده [[mount|سوار]] می‌کنیم.
  
اگر در هنگام نصب توزیع خود، پارتیشن مجزایی برای boot/ در نظر گرفته بوده‌اید با دستور زیر boot/ را هم mount نمایید:
+
{{bc|
 +
$ sudo mount /dev/sda3 /mnt
 +
}}
  
<pre>sudo mount /dev/sda6 /mnt/boot</pre>
 
  
در دستور فوق فرض بر این است که dev/sda6/ پارتیشن boot میباشد.
+
اگر هنگام نصب توزیع خود، افراز جدایی (فرض می‌شود {{ic|/dev/sda2}} ) برای boot در نظر گرفته بوده‌اید با دستور زیر boot را هم سوار نمایید:
  
حال با ls یک لیست از شاخه mnt بگیرید تا اطمینان پیدا کنید که عملیات mount صحیح اجرا شده و آماده سایر مراحل هستیم:
+
{{bc|
 +
$ sudo mount /dev/sda2 /mnt/boot
 +
}}
  
<pre>ls /mnt</pre>
+
در صورتی که سامانهٔ راه‌اندازی رایانهٔ شما از نوع [[UEFI]] است، لازم است افراز ESP نیز سوار شود. با فرض قرار داشتن ESP در {{ic|/dev/sda1}} داریم:
  
خروجی باید مشابه زیر باشد:
+
{{bc|
 +
$ sudo mount /dev/sda1 /mnt/boot/efi
 +
}}
  
<pre>bin  etc  initrd.img.old  media  proc   sbin  tmp  vmlinuz
+
برای شناخت صحیح افرازها در گراب باید شاخه‌های مجازی dev و proc و sys را از توزیع زنده‌ای که هم‌اکنون در حال کار با آن هستیم، روی سامانه‌پرونده‌ی سیستم اصلی خود سوار کنیم:
boot home lib mnt  root srv  usr  vmlinuz.old
 
dev  initrd.img  lost+found  opt  run  sys   var</pre>
 
  
همینکار را برای شاخه boot/ تکرار نمایید:
+
{{bc|
 +
$ sudo mount --bind /dev/ /mnt/dev
 +
$ sudo chroot /mnt/ mount -t proc proc /proc
 +
$ sudo chroot /mnt/ mount -t sysfs sysfs /sys
 +
$ sudo chroot /mnt/ mount -t devpts devpts /dev/pts
 +
}}
  
<pre>ls /boot</pre>
+
==نصب گراب==
 +
حال باید گراب را روی دیسک اصلی خود که راه‌انداز [[Bios|بایوس]] به [[MBR|رکورد راه‌اندازی اصلی]] آن اشاره می‌کند، نصب کرد. با فرض این که <code>sda</code> دیسک اصلی شماست:
  
خروجی مشابه زیر دریافت خواهید کرد:
+
{{bc|
 +
$ sudo grub-install --root-directory{{=}}/mnt/ /dev/sda
 +
}}
  
<pre>abi-3.13.0-44-generic
+
برای سامانه‌های UEFI می‌توان برای رفتن به ریشهٔ سوار شده و نصب گراب از این دستورها استفاده کرد:
abi-3.13.0-45-generic
 
vmlinuz-3.13.0-45-generic</pre>
 
...
 
  
حال باید شاخه های زیر را برروی شاخه مشابه در mnt به صورت bind‌ سوار نماییم (mount کنیم):
+
{{bc|
 +
$ sudo chroot /mnt
 +
# grub-install --target{{=}}x86_64-efi --efi-directory{{=}}/boot/efi
 +
}}
  
<pre>/dev
+
==رفتن به محیط اوبونتوی اصلی==
/dev/pts
+
اگر هنوز به ریشهٔ سوار شده وارد نشده‌ایم، این کار را با [[chroot]] انجام می‌دهیم:
/proc
 
/sys</pre>
 
  
انجام عملیات Mount به همراه پارامتر bind باعث می‌شود محتویات شاخه های فوق در هر دو محل به صورت یکسان قابل دسترس باشند. نحوه mount کردن به صورت زیر خواهد بود:
+
{{bc|
 +
$ sudo chroot /mnt
 +
}}
  
<pre>sudo mount –bind foo bar</pre>
+
===به‌روز رسانی گراب===
 +
حال باید فهرست گراب را بر اساس آن‌چه روی دیسک وجود دارد به‌روز رسانی کرد:
  
یا به صورت زیر:
+
{{bc|
 +
# update-grub
 +
}}
  
<pre>sudo mount -B foo bar</pre>
+
==خروج==
 +
سپس با زدن دستور <code>exit</code> یا فشردن دکمه‌های ctrl+d از محیط chroot خارج می‌شویم. پس از آن باید افرازهای سوار شده را پیاده کرد:
  
در نتیجه لازم است شاخه های مذکور را به صورت ذکر شده mount نماییم، برای مثال نحوه مانت شاخه dev/ به صورت زیر خواهد بود:
+
{{bc|
 +
$ sudo umount -R /mnt
 +
}}
  
<pre>sudo mount -B /dev /mnt/dev</pre>
+
==پایان==
 +
در پایان رایانه را دوباره راه‌اندازی کرده و با خارج کردن رسانهٔ زنده، با گراب به اوبونتوی اصلی خود وارد شوید.
  
برای راحتی و سرعت بخشیدن به کار میتوان از یک حلقه for استفاده کرد. کد زیر هر ۴ شاخه مذکور را در محل صحیح mount خواهد کرد، این دستور را در یک خط وارد و اجرا نمایید:
+
=روش‌های جایگزین=
 +
می‌توانید برای انجام این کار از نرم‌افزار [[Boot Repair|بوت ریپیر]] نیز کمک بگیرید.
  
<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/sda3 باشد. این افراز را روی سامانه‌پروندهٔ توزیع زنده سوار می‌کنیم.


$ sudo mount /dev/sda3 /mnt


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


$ sudo mount /dev/sda2 /mnt/boot

در صورتی که سامانهٔ راه‌اندازی رایانهٔ شما از نوع UEFI است، لازم است افراز ESP نیز سوار شود. با فرض قرار داشتن ESP در /dev/sda1 داریم:


$ sudo mount /dev/sda1 /mnt/boot/efi

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


$ sudo mount --bind /dev/ /mnt/dev
$ sudo chroot /mnt/ mount -t proc proc /proc
$ sudo chroot /mnt/ mount -t sysfs sysfs /sys
$ sudo chroot /mnt/ mount -t devpts devpts /dev/pts

نصب گراب

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


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

برای سامانه‌های UEFI می‌توان برای رفتن به ریشهٔ سوار شده و نصب گراب از این دستورها استفاده کرد:


$ sudo chroot /mnt
# grub-install --target=x86_64-efi --efi-directory=/boot/efi

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

اگر هنوز به ریشهٔ سوار شده وارد نشده‌ایم، این کار را با chroot انجام می‌دهیم:


$ sudo chroot /mnt

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

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


# update-grub

خروج

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


$ sudo umount -R /mnt

پایان

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

روش‌های جایگزین

می‌توانید برای انجام این کار از نرم‌افزار بوت ریپیر نیز کمک بگیرید.