將Debian從Legacy切換為UEFI啟動模式
作者:Jens Getreu
原文為英文,譯文由有道翻譯及谷歌翻譯提供。
警告:由於文章由翻譯工具翻譯,僅供參考。並不能保證其準確性。
目錄
- 啟動活動系統
- 準備硬碟(I.備份您的資料;II.識別Debian的“/boot”分割槽;III.建立GPT分割槽表;IV.建立UEFI分割槽)
- 安裝Debain檔案系統(I.掛載未加密的根檔案系統;II.掛載加密的根檔案系統;III.掛載剩餘的檔案系統)
- 更新debians目錄/etc/fstab
- 在切換為root的環境中(I.準備;II.安裝grub-efi)
- 驗證UEFI BIOS中的Debian載入程式
- 參考文獻
本說明解釋瞭如何將Legacy引導Debian/Ubuntu系統切換到UEFI引導系統。典型用例:
- 將舊式引導安裝切換到UEFI。
- 在Debian 7、Debian 8或Debian 9上重新安裝一個壞掉的UEFI引導載入程式。
本手冊已在Debian 7 Wheezy,Debian 8 Jessie和Debian 9 Stretch上測試過。
1.啟動活動系統
I.在BIOS中啟用UEFI
II.通過USB或DVD引導最近的Debian活動系統
2.準備硬碟
I.備份您的資料
II.識別Debian的“/boot”分割槽
我的Lecagy引導系統在/boot上安裝了一個243MiB ext2分割槽。這個分割槽從來沒有加密過。它是grub檔案和Linux核心駐留的地方。通過雙擊live-disk-desktop上的partition圖示進行檢查,並檢視其中的內容。
# ls -l
total 21399
-rw-r--r-- 1 root root 155429 Sep 28 00:59 config-3.16-0.bpo.2-amd64
drwxr-xr-x 3 root root 7168 Nov 5 08:03 grub
-rw-r--r-- 1 root root 15946275 Nov 5 16:28 initrd.img-3.16-0.bpo.2-amd64
drwx------ 2 root root 12288 Nov 24 2012 lost+found
-rw-r--r-- 1 root root 2664392 Sep 28 00:59 System.map-3.16-0.bpo.2-amd64
-rw-r--r-- 1 root root 3126096 Sep 28 00:48 vmlinuz-3.16-0.bpo.2-amd64
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/sdb1 234M 28M 206M 13% /media/....
正如您可以在Debian的Legacy引導系統的下一個分割槽表中看到的,我的/boot分割槽是number 1(/dev/sdb1)。
雖然1是標準debian安裝的預設值,但最好檢查一下!
活動系統將這個分割槽標識為/dev/sdb。硬碟上的debian系統可以不同的方式引用它。
Debian Legacy引導系統的分割槽表
# fdisk -l /dev/sdb
...
Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 499711 44032 7 HPFS/NTFS/exFAT
...
/dev/sdb5 501760 976771071 488134656 83 Linux
在Legacy引導模式下,/boot分割槽必須設定引導標誌(*)。這證實了我們的假設:/boot檔案系統在:/dev/sdb1上。
# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
...
Number Start (sector) End (sector) Size Code Name
1 2048 499711 243.0 MiB 8300 Linux filesystem
5 501760 976771071 238.2 GiB 8300 Linux filesystem
III.建立GPT分割槽表
將分割槽表從MBR轉換為GPT
# gdisk /dev/sdb
r recovery and transformation options (experts only)
f load MBR and build fresh GPT from it
IV.建立UEFI分割槽
gparted是一個好的GNOME圖形分割槽編輯器工具。利用它,可以很方便地進行分割槽操作:
# gparted /dev/sdb
將/root分割槽縮小到200MB以便釋放43MB(見下面的分割槽1)。
使用帶有分割槽程式碼EF00(efi系統)的gparted為efi建立一個新的43MB的分割槽,並將其標記為可引導的分割槽。使用fat32檔案系統格式化分割槽(見下面的分割槽2)。
UEFI還需要另外一個未格式化的1MB分割槽(見下面的分割槽3)。
其他分割槽保持不變(參見下面的分割槽5)。
這裡的結果:
Debian UEFI引導系統的分割槽表
# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 976773168 sectors, 465.8 GiB
...
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB 8300 Linux filesystem
2 411648 499711 43.0 MiB EF00 Efi partition
3 499712 501759 1024.0 KiB 8300 Linux filesystem
5 501760 976771071 465.5 GiB 8300 Linux filesystem
3.安裝Debain檔案系統
下一步不同於根檔案系統是否加密。
I.掛載未加密的根檔案系統
掛載/(根)檔案系統。
對於非加密的根檔案系統,一個簡單的掛載就可以了。
# mount -t ext4 /dev/sdb5 /mnt
II.掛載加密的根檔案系統
對於加密的根檔案系統,安裝過程可能有點棘手,尤其是當根檔案系統駐留在加密的邏輯卷中時。本節演示如何掛載和解除安裝加密的根檔案系統。
Debian 9 Stretch安裝程式磁碟的恢復模式自動執行以下所有步驟。先試試這個。如果它不工作,請遵循本節的其餘部分。
(1)找到要掛載的邏輯卷的裝置和分割槽
①將磁碟與主機系統連線,並觀察/var/log/syslog中的核心訊息
root@host-system:~# tail -f /var/log/syslog
sd 3:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB)
sd 3:0:0:0: [sdb] Write Protect is of manually.
sd 3:0:0:0: [sdb] Mode Sense: 43 00 00 00
sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn`t support DPO or FUA
sdb: sdb1 sdb2 sdb3 sdb5
sd 3:0:0:0: [sdb] Attached SCSI disk
待掛載裝置為/dev/sdb。
②找到分割槽
root@host-system:~# gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.5
...
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB 8300 Linux filesystem
2 411648 494821 43.0 MiB 0700
3 494822 501759 1024.0 KiB 8300 Linux filesystem
5 501760 976771071 465.5 GiB 8300 Linux filesystem
磁碟系統要掛載的邏輯卷駐留在/dev/sdb5上。
(2)掛載邏輯加密卷
①開啟解密層
root@host-system:~# lvscan
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
如果邏輯卷尚未註冊,那麼這樣做:
root@host-system:~# cryptsetup luksOpen /dev/sdb5 sdb5_crypt
Enter passphrase for /dev/sdb5:
鍵入磁碟密碼。
root@host-system:~# lvscan
inactive `/dev/disk-system/root` [457.74 GiB] inherit
inactive `/dev/disk-system/swap_1` [7.78 GiB] inherit
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
磁碟系統的邏輯卷現在已註冊。它包含一個根分割槽(第1行)和一個交換分割槽(第2行)。
②啟動邏輯卷
root@host-system:~# lvchange -a y disk-system
檢查成功。
root@host-system:~# lvscan
ACTIVE `/dev/disk-system/root` [457.74 GiB] inherit
ACTIVE `/dev/disk-system/swap_1` [7.78 GiB] inherit
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
root@host-system:~# ls /dev/mapper
control disksystem-root disksystem-swap_1 hostsystem-root hostsystem-swap_1 mymapper sdb5_crypt
③掛載邏輯卷
root@host-system:~# mount -t ext4 /dev/mapper/disksystem-root /mnt
檢查成功。
root@host-system:~# ls /mnt
bin etc initrd.img.old lib64 mnt proc sbin sys var
boot home lib lost+found mnt2 root selinux tmp vmlinuz
dev initrd.img lib32 media opt run srv usr vmlinuz.old
(3)解除掛載邏輯加密卷
本節只是為了完整性,可以跳過它。
root@host-system:~# umount /mnt
root@host-system:~# lvscan
ACTIVE `/dev/disk-system/root` [457.74 GiB] inherit
ACTIVE `/dev/disk-system/swap_1` [7.78 GiB] inherit
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
root@host-system:~# lvchange -a n disk-system
root@host-system:~# lvscan
inactive `/dev/disk-system/root` [457.74 GiB] inherit
inactive `/dev/disk-system/swap_1` [7.78 GiB] inherit
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
root@host-system:~# cryptsetup luksClose sdb5_crypt
root@host-system:~# lvscan
ACTIVE `/dev/host-system/root` [231.03 GiB] inherit
ACTIVE `/dev/host-system/swap_1` [7.20 GiB] inherit
III.掛載剩餘的檔案系統
可以這樣
# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb2 /mnt/boot/efi
# for i in /dev/ /dev/pts /proc /sys ; do mount -B $i /mnt/$i ; done
或者通過這種方式,這兩個命令執行相同的操作……
# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb2 /mnt/boot/efi
# mount --bind /sys /mnt/sys
# mount --bind /proc /mnt/proc
# mount --bind /dev /mnt/dev
# mount --bind /dev/pts /mnt/dev/pts
網際網路接入
切換為root接入內部網際網路:
# cp /etc/resolv.conf /mnt/etc/resolv.conf
4.更新debians目錄/etc/fstab
更新/mnt/etc/fstab中的條目,以反映上面的分割槽更改。將UUID與這裡列出的進行比較:
# ls /dev/disk/by-uuid
新增新的UEFI分割槽(見下面/etc/fstab中的最後一行),以便將它永久地掛載到/boot/efi上。
# cat /mnt/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/koobue1-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/sdb1 during installation
UUID=040cdd12-8e45-48bd-822e-7b73ef9fa09f /boot ext2 defaults 0 2
/dev/mapper/koobue1-swap_1 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
#Jens: tmpfs added for SSD
tmpfs /tmp tmpfs defaults,nodev,nosuid,size=500m 0 0
tmpfs /var/lock tmpfs defaults,nodev,nosuid,noexec,mode=1777,size=100m 0 0
tmpfs /var/run tmpfs defaults,nodev,nosuid,noexec,mode=0775,size=100m 0 0
UUID=19F0-4372 /boot/efi vfat defaults 0 2
我使用/dev/mapper加密檔案系統和tmpfs,因為我有一個SSD磁碟。
5.在切換為root的環境中
I.準備
鍵入:
# chroot /mnt
檢查
# cat /etc/fstab
對於尚未掛載的條目,手動掛載。
# mount /tmp
# mount /run
# mount /var/lock
...
II.安裝grub-efi
# apt-get remove grub-pc
# apt-get install grub-efi
# grub-install /dev/sdb
檢查efi檔案是否存在:
# file /boot/efi/EFI/debian/grubx64.efi
/boot/efi/EFI/debian/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
Debian條目應該列在這裡:
# efibootmgr
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,2001,2002,2003
Boot0000* debian
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network
退出root環境。
exit
重新啟動系統。
6.驗證UEFI BIOS中的Debian載入程式
預設情況下,BIOS不接受引導載入程式,因為/EFI/debian/grubx64。efi不是預設路徑,因為該檔案沒有微軟的簽名。
這就是為什麼grubx64。必須在UEFI BIOS設定中手動驗證efi。在我的InsydeH2O BIOS中我選擇:
安全▸選擇一個UEFI檔案作為可信▸進入
然後瀏覽到
/EFI/debian/grubx64.efi
為了將grub引導載入程式插入到受信任的引導載入程式BIOS資料庫中。
在我的巨集碁E3-111上,BIOS選單項預設是禁用的。為了啟用它,我必須首先定義一個管理員密碼。
安全▸進入設定管理員密碼
7.參考文獻
Tanguy
Tanguy:Debian:切換到UEFI boot(http://tanguy.ortolo.eu/blog/article51/debian-efi,2012年4月)。
(文章內容有改動)
相關文章
- UEFI和Legacy相容啟動U盤製作
- windows 之醬紫判斷是UEFI還是legacy啟動Windows
- 如何將 Debian Linux 中的預設的 Python 版本切換為LinuxPython
- 製作基於debian的linux live啟動u盤(UEFI)Linux
- win10怎麼改為uefi啟動_win10系統設定uefi啟動模式的方法Win10模式
- 微星筆記本怎麼切換啟動模式?微星筆記本bios設定啟動模式切換的教程筆記模式iOS
- 修復UEFI模式下Manjaro Linux啟動問題模式JARLinux
- ostgreSQL主從切換-手動SQL
- 我將從VS Code切換到VS Codium
- 為什麼Discord從Go切換到Rust?GoRust
- UEFI雙啟動Windows和LinuxWindowsLinux
- 從log4j切換到logback後專案無法啟動
- docker Redis單機主從哨兵模式切換失敗DockerRedis模式
- Redis主從切換Redis
- Mac APP快速啟動及切換神器:ManicoMacAPP
- Manico for Mac APP快速啟動及切換神器MacAPP
- flutter 暗黑模式切換過渡動畫實現Flutter模式動畫
- 為什麼我們從Yarn切換到pnpmYarnNPM
- uefi啟動U盤如何安裝系統_uefi啟動u盤安裝系統的方法
- postgresql10主從+keepalived高可用自動切換(切換關鍵在指令碼)SQL指令碼
- Win10怎樣切換平板模式_win10如何切換到平板模式Win10模式
- 手工切換MySQL主從MySql
- Redis sentinel主從切換Redis
- 為什麼我們從RabbitMQ切換到apache kafka?MQApacheKafka
- 為什麼我們從Webpack切換到Vite - ReplitWebVite
- uefi啟動隨身碟如何安裝系統_uefi啟動u盤安裝系統的方法
- 快速切換至Kotlin for Android模式KotlinAndroid模式
- Debian:如何從Jessie升級為Stretch
- win10怎麼切換到桌面模式_win10平板模式和桌面模式的切換教程Win10模式
- 怎樣把u盤製作成uefi啟動盤_最新uefi啟動u盤製作步驟詳解
- 從原始碼研究如何不重啟Springboot專案實現redis配置動態切換原始碼Spring BootRedis
- MYSQL5.6主從+keepalive高可用自動切換MySql
- Dledger是如何實現主從自動切換的
- python 爬蟲 自動切換 learnku 的白天 / 夜間模式Python爬蟲模式
- win10系統下電源模式總會自動切換更改為“節能”模式怎麼辦Win10模式
- uniapp 滑動切換APP
- 將git倉庫從submodule轉換為subtreeGit
- 為什麼我從Java切換到Rust? Opensource.comJavaRust