Arch-Linux

Grub-install:在 Bios/GPT 中無法嵌入

  • October 6, 2018

幾天來,我一直在努力設置加密的 NAS。基本計劃是在 raid1 上的 luks 上的 lvm 上安裝 btrfs,並為根分區引入處於寫回模式的 lvmcache,以減少磁碟訪問。

TL; 博士:

設置分區和文件系統GRUB後安裝失敗:

grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels.  This is not supported yet..
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.

分區

在 Arch Wiki 之後,我首先設置分區:

gdisk/dev/sda 和 /dev/sdb 的輸出:

Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9EFA6587-E34F-4AC1-8B56-5262480A6C6A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
  1            2048            4095   1024.0 KiB  EF02  BIOS boot partition
  2            4096       976773134   465.8 GiB   8300  Linux filesystem

請注意在模式下安裝時顯然需要的BIOS 引導分區。GRUB``BIOS/GPT

MDADM

因為我有兩個磁碟,所以我希望它們在一個RAID1數組中:

mdadm --create --level=1 --raid-devices=2 /dev/md0 /dev/sda2 /dev/sdb2

root@archiso ~ # mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=archiso:0 UUID=bdfc3fea:f4a0ee6d:6ac08012:59ea384b

root@archiso ~ # cat /proc/mdstat     
Personalities : [raid1] 
md0 : active raid1 sdb2[1] sda2[0]
     488253440 blocks super 1.2 [2/2] [UU]
     [>....................]  resync =  2.0% (9832384/488253440) finish=96.6min speed=82460K/sec
     bitmap: 4/4 pages [16KB], 65536KB chunk

unused devices: <none>

奢華

接下來我LUKS在上面設置一個卷RAID

root@archiso ~ # cryptsetup luksFormat /dev/md0 

WARNING!
========
This will overwrite data on /dev/md0 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase:


root@archiso ~ # cryptsetup luksOpen /dev/md0 md0-crypt
Enter passphrase for /dev/md0:

LVM

Btrfs可以使用快照LVM代替Btrfs. 所以我選擇稍後LVM通過以下方式使用和添加 SSD lvmcache

(一步創建卷組:)

root@archiso ~ # vgcreate vg0 /dev/mapper/md0-crypt 
 Physical volume "/dev/mapper/md0-crypt" successfully created
 Volume group "vg0" successfully created

root@archiso ~ # lvcreate -L 100M -C y vg0 -n boot
 Logical volume "boot" created.
root@archiso ~ # lvcreate -L 20G vg0 -n root
 Logical volume "root" created.
root@archiso ~ # lvcreate -L 10G vg0 -n var
 Logical volume "var" created.
root@archiso ~ # lvcreate -L 6G -C y vg0 -n swap
 Logical volume "swap" created.
root@archiso ~ # lvcreate -l +100%FREE vg0 -n home
 Logical volume "home" created

導致以下佈局:

root@archiso ~ # lvs
 LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 boot vg0  -wc-a----- 100.00m                                                    
 home vg0  -wi-a----- 429.53g                                                    
 root vg0  -wi-a-----  20.00g                                                
 swap vg0  -wc-a-----   6.00g                                                    
 var  vg0  -wi-a-----  10.00g 

Btrfs/文件系統

創建文件系統:

root@archiso ~ # mkfs.ext4 /dev/vg0/boot
root@archiso ~ # mkfs.btrfs /dev/vg0/home
root@archiso ~ # mkfs.btrfs /dev/vg0/root
root@archiso ~ # mkfs.btrfs /dev/vg0/var

(因為抱怨分區太小ext4而被選為引導。)btrfs

掛載文件系統:

root@archiso ~ # swapon /dev/vg0/swap
root@archiso ~ # mount /dev/vg0/root /mnt/arch -o compress=lzo
root@archiso ~ # mount /dev/vg0/home /mnt/arch/home -o compress=lzo
root@archiso ~ # mount /dev/vg0/var /mnt/arch/var -o compress=lzo
root@archiso ~ # mount /dev/vg0/boot /mnt/arch/boot

安裝拱門

實際上我只是從以前的備份中複製系統:

root@archiso ~ # rsync -Pa /mnt/bkp/sda/* /mnt/arch

茶歇

設置 mdadm.conf 和 fstab

root@archiso ~ # genfstab -U /mnt/arch > /mnt/arch/etc/fstab
root@archiso ~ # cat /mnt/arch/etc/fstab 
# /dev/mapper/vg0-root
UUID=62ebf0c9-bb37-4b4e-87dd-eb8a4ace6a69       /               btrfs           rw,relatime,compress=lzo,space_cache 0 0

# /dev/mapper/vg0-home
UUID=53113e11-b663-452f-b4da-1443e470b065       /home           btrfs           rw,relatime,compress=lzo,space_cache 0 0

# /dev/mapper/vg0-var
UUID=869ffe10-7a1c-4254-9612-25633c7ae619       /var            btrfs           rw,relatime,compress=lzo,space_cache 0 0

# /dev/mapper/vg0-boot
UUID=d121a9df-8c03-4ad9-a6e0-b68739b1a358       /boot           ext4            rw,relatime,data=ordered        0 2

# /dev/mapper/vg0-swap
UUID=29035eeb-540d-4437-861b-c30597bb7c16       none            swap            defaults        0 0

root@archiso ~ # mdadm --detail --scan >> /mnt/arch/etc/mdadm.conf
root@archiso ~ # cat /mnt/arch/etc/mdadm.conf
[...]
ARRAY /dev/md0 metadata=1.2 name=archiso:0 UUID=bdfc3fea:f4a0ee6d:6ac08012:59ea384b

進入系統

root@archiso ~ # arch-chroot /mnt/arch /bin/bash
[root@archiso /]#

mkinitcpio.conf

添加了這些鉤子:mdadm_udev encrypt lvm2 btrfs

[root@archiso /]# mkinitcpio -p linux

配置 GRUB

現在對於有趣的(和失敗的)部分,我選擇GRUB作為我的引導載入程序,因為它應該支持我使用的所有裝置。

參考:

更改的部分/etc/default/grub

GRUB_CMDLINE_LINUX="cryptdevice=/dev/md0:vg0"
GRUB_ENABLE_CRYPTODISK=y

安裝 grub:

[root@archiso /]# grub-install --target=i386-pc --recheck  /dev/sda                                                  
Installing for i386-pc platform.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
 /run/lvm/lvmetad.socket: connect failed: No such file or directory
 WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels.  This is not supported yet..
grub-install: error: embedding is not possible, but this is required for RAID and LVM install.

--debug輸出可用here

坦率地說……我不知道這裡有什麼問題。在 BIOS/GPT 模式下,GRUB 應該將它的 core.img 嵌入到ef02/BIOS boot分區中,不是嗎?

編輯

https://bbs.archlinux.org/viewtopic.php?id=144254不適用於此處:

[root@archiso /]# btrfs fi show --all-devices
Label: none  uuid: 62ebf0c9-bb37-4b4e-87dd-eb8a4ace6a69
       Total devices 1 FS bytes used 965.77MiB
       devid    1 size 20.00GiB used 3.04GiB path /dev/mapper/vg0-root

Label: none  uuid: 869ffe10-7a1c-4254-9612-25633c7ae619
       Total devices 1 FS bytes used 339.15MiB
       devid    1 size 10.00GiB used 3.04GiB path /dev/mapper/vg0-var

Label: none  uuid: 53113e11-b663-452f-b4da-1443e470b065
       Total devices 1 FS bytes used 384.00KiB
       devid    1 size 429.53GiB used 2.04GiB path /dev/mapper/vg0-home

Btrfs v3.17.3

嗯……顯然這條線是線索:

grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels.  This is not supported yet..

以前我btrfs直接安裝在/dev/sdaand上/dev/sdb。這就是為什麼它們都附加了 FSTYPE 和 LABEL(如圖所示lsblk)。

**解決方案:**我現在已經用(安全擦除)擦除了/dev/sda兩者。可能有更好的方法來取消設置這些標誌……但這對我有用。/dev/sdb``hdparm

這是Google的頂級搜尋結果之一

grub-install: error: embedding is not possible, but this is required for RAID and LVM install.

對我來說,解決方法是用 dd 擦除我的啟動磁碟(我試圖在 USB 磁碟上安裝 GRUB),比如……

dd if=/dev/zero of=/dev/sdd bs=1M status=progress

然後創建一個新的分區表,除了這次啟動它比預設的晚幾個扇區…

fdisk /dev/sdd

n (for new partition)

p (for primary partition)

1 (for partition 1)

50000 (for first sector 50,000 vs default 2,480)

寫好新的分區和分區表後,我執行了 grub-install 程序…

grub-install --force --skip-fs-probe /dev/sdd

引用自:https://unix.stackexchange.com/questions/176843