Grub-install: không thể nhúng vào Bios / GPT


7

Tôi đang vật lộn với việc thiết lập một NAS được mã hóa trong một số ngày nay. Kế hoạch cơ bản là có btrfs trên lvm trên luks trên raid1 với lvmcache ở chế độ writBack được ném vào phân vùng gốc để giảm quyền truy cập đĩa.

TL; DR:

Sau khi thiết lập phân vùng và hệ thống tập tin GRUBkhông cài đặt được với:

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.

Phân vùng

Theo Arch Wiki tôi bắt đầu bằng cách thiết lập các phân vùng:

gdisk đầu ra cho / dev / sda và / 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

Lưu ý phân vùng khởi động BIOS rõ ràng là bắt buộc GRUBkhi cài đặt ở BIOS/GPTchế độ.

MDADM

Khi tôi có hai đĩa, tôi muốn chúng trong một RAID1mảng:

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

Tiếp theo tôi thiết lập một LUKSâm lượng trên đầu trang 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ảnh chụp nhanh có thể được sử dụng thay vì LVM, nhưng khi viết điều này, không có cách nào để thêm một thiết bị lưu trữ SSD vào Btrfs. Vì vậy, tôi đã chọn sử dụng LVMvà thêm SSD qua lvmcachesau:

(Tạo nhóm âm lượng trong một bước :)

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

Kết quả trong cách bố trí sau:

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 / Hệ thống tập tin

Tạo các hệ thống tập tin:

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được chọn để khởi động vì btrfsphàn nàn về kích thước phân vùng nhỏ.)

Gắn kết các hệ thống tập tin:

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

Cài đặt Arch

Trên thực tế tôi chỉ sao chép hệ thống từ bản sao lưu trước:

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

( nghỉ giải lao )

Thiết lập mdadm.conf và 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

Chroot vào hệ thống

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

mkinitcpio.conf

Những cái móc này đã được thêm vào: mdadm_udev encrypt lvm2 btrfs

[root@archiso /]# mkinitcpio -p linux

Cấu hình GRUB

Bây giờ là phần thú vị (và thất bại), tôi đã chọn GRUBlàm bộ tải khởi động của mình vì nó sẽ hỗ trợ tất cả các mâu thuẫn mà tôi sử dụng.

Người giới thiệu:

Phần thay đổi trong /etc/default/grub:

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

Cài đặt 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đầu ra có sẵn ở đây )

Thành thật mà nói ... tôi không biết vấn đề ở đây là gì. Trong chế độ BIOS / GPT GRUB có nên nhúng core.img vào ef02/BIOS bootphân vùng không?

Biên tập

https://bbs.archlinux.org/viewtopic.php?id=144254 không áp dụng tại đây:

[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

Bạn nên sử dụng
Grub2

@frostschutz Tôi khá chắc chắn rằng tôi có sử dụng Grub2 ( grubgói không grub-legacy).
fho

@derobert Grub2 có thể xử lý các phân vùng khởi động được mã hóa như hiển nhiên ở đây . Lý do duy nhất tôi có /bootâm lượng riêng biệt là để giữ dữ liệu ở đầu đĩa (để giảm thiểu vấn đề khác ...).
fho

@Florian wow, tôi không biết điều đó. Đẹp. [BTW: Sẽ xóa những bình luận không hữu ích của tôi.]
derobert

Bạn nên loại bỏ grubhoàn toàn. Và bạn cũng có thể làm mà không cần lvm- bcachelà một phương tiện đơn giản hơn nhiều để xử lý một thiết bị lưu trữ ssd. Nhân tiện - bạn không cần riêng biệt /boot- đã có sẵn trong phân vùng hệ thống EFI của bạn. Đặt initramfs và kernel hệ thống của bạn vào đặc biệt trong một thư mục nào đó, gắn kết thư mục đó /bootvào /etc/fstabvà sau đó chỉ cần tải trực tiếp kernel từ firmware mà không cần bộ tải khởi động trung gian. Dù sao họ cũng chỉ đau đầu thôi. Nếu bạn muốn các menu khởi động - ala grub- có được một cái gì đó dễ dàng hơn - rEFIndlà tốt đẹp.
mikeerv

Câu trả lời:


5

Hmm ... rõ ràng dòng này là đầu mối:

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

Trước đây tôi đã cài đặt btrfstrực tiếp trên /dev/sda/dev/sdb. Đó là lý do tại sao cả hai đều có FSTYPE và LABEL kèm theo (như thể hiện trong lsblk).

Giải pháp: Bây giờ tôi đã xóa cả hai /dev/sda/dev/sdbvới hdparm(Xóa an toàn). Có lẽ có một cách tốt hơn để bỏ đặt những lá cờ đó ... nhưng điều này hiệu quả với tôi.


2
Bạn có thể có thể sử dụng, ví dụ, ddchỉ cần xóa sạch vài megabyte đầu tiên và có thể cuối cùng. Moot điểm bây giờ, tất nhiên.
derobert

Đúng ... nghĩ về điều đó trước tiên ... nhưng sau đó đã phát hiện ra các tính năng Xóa an toàn :)
fho

0

Đây là một trong những kết quả hàng đầu của Google cho

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

Cách khắc phục đối với tôi là xóa sạch đĩa khởi động (tôi đang cố cài đặt GRUB trên đĩa USB) bằng dd, như ...

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

Và sau đó tạo một bảng phân vùng mới, ngoại trừ lần này khởi động nó một vài lĩnh vực muộn hơn so với mặc định ...

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)

Với bảng phân vùng và bảng phân vùng mới được viết, tôi đã chạy chương trình cài đặt grub ...

grub-install --force --skip-fs-probe /dev/sdd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.