AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1299978
Accepted
Niclas Börlin
Niclas Börlin
Asked: 2020-12-15 00:59:59 +0800 CST2020-12-15 00:59:59 +0800 CST 2020-12-15 00:59:59 +0800 CST

在具有 UEFI BIOS 的机器上安装具有 RAID 1 和 LVM 的 Ubuntu 20.04 桌面

  • 772

我有一台带有 UEFI BIOS 的机器。我想在 RAID 1 上安装带有 LVM 的 Ubuntu 20.04 桌面,因此即使其中一个驱动器发生故障,我的系统也将继续工作。我还没有找到一个HOWTO。20.04 桌面安装程序支持 LVM 但不支持 RAID。这个问题的答案描述了 18.04 的过程。但是,20.04 不提供备用服务器安装程序。这个问题和这个问题的答案描述了 RAID 但不是 LVM 或 UEFI。有没有人有一个适用于 20.04 的进程,在 UEFI 机器的 RAID 1 之上使用 LVM?

system-installation lvm raid uefi 20.04
  • 2 2 个回答
  • 9608 Views

2 个回答

  • Voted
  1. Best Answer
    Niclas Börlin
    2021-03-13T08:22:15+08:002021-03-13T08:22:15+08:00

    经过几周的试验并在此链接的帮助下,我终于找到了一个可行的解决方案。以下序列是使用 Ubuntu 20.04.2.0 LTS 执行的。我也在虚拟机中成功完成了 21.04.0 的过程。(但是,请注意,Ubuntu 21.04 和一些较旧的 UEFI 系统存在问题。

    简而言之

    1. 下载并启动 Ubuntu Live for 20.04。
    2. 设置 mdadm 和 lvm。
    3. 运行 Ubuntu 安装程序,但不要重新启动。
    4. 将 mdadm 添加到目标系统。
    5. 将 EFI 分区克隆到第二个驱动器。
    6. 将第二个 EFI 分区安装到 UEFI 引导链中。
    7. 重启

    详细地

    1. 下载安装程序并启动进入 Ubuntu Live

    1.1 下载

    • 从https://ubuntu.com/download/desktop下载 Ubuntu 桌面安装程序并将其放到可启动媒体上。(截至 2021 年 12 月 13 日,iso 被称为 ubuntu-20.04.3-desktop-amd64.iso。)

    1.2 启动 Ubuntu Live

    • 从步骤 1.1 启动到媒体。
    • 选择Try Ubuntu。
    • 按 Ctrl-Alt-T 启动终端。应在该终端中输入以下命令。

    2.设置mdadm和lvm

    在下面的示例中,磁盘设备被称为/dev/sda和/dev/sdb。如果您的磁盘被称为其他名称,例如/dev/nvme0n1and /dev/sdb,您应该相应地替换磁盘名称。您可以使用sudo lsblk来查找磁盘的名称。

    2.0 安装ssh服务器

    如果您不想键入以下所有命令,则可以安装希望通过 ssh 登录并剪切并粘贴命令。

    • 安装

      sudo apt install openssh-server

    • 设置密码以启用外部登录

      passwd

    • 如果您在虚拟机中对此进行测试,您可能需要转发一个合适的端口。选择Settings、Network、Advanced、Port forwarding和加号。输入,例如,3022作为Host Port和22作为访客端口,然后按OK。或者从您的主机系统的命令行(将 VMNAME 替换为您的虚拟机的名称):

      VBoxManage modifyvm VMNAME --natpf1 "ssh,tcp,,3022,,22"
      VBoxManage showvminfo VMNAME | grep 'Rule'
      

    现在,您应该可以使用外部计算机登录到您的 Ubuntu Live 会话

    ssh <hostname> -l ubuntu
    

    或者,如果您在 上的虚拟机上进行测试localhost,

    ssh localhost -l ubuntu -p 3022
    

    以及您在上面设置的密码。

    2.1 在物理磁盘上创建分区

    • 将分区表归零

      sudo sgdisk -Z /dev/sda
      sudo sgdisk -Z /dev/sdb
      
    • 在每个驱动器上创建两个分区;一个用于 EFI,一个用于 RAID 设备。

      sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sda
      sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sda
      sudo sgdisk -n 1:0:+512M -t 1:ef00 -c 1:"EFI System" /dev/sdb
      sudo sgdisk -n 2:0:0 -t 2:fd00 -c 2:"Linux RAID" /dev/sdb
      
    • 为第一个驱动器上的 EFI 分区创建一个 FAT32 系统。(稍后将克隆到第二个驱动器。)

      sudo mkfs.fat -F 32 /dev/sda1
      

    2.2 安装 mdadm 并创建 md 设备

    安装mdadm

      sudo apt-get update
      sudo apt-get install mdadm
    

    创建 md 设备。忽略有关元数据的警告,因为该阵列不会用作引导设备。

      sudo mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-disks=2 /dev/sda2 /dev/sdb2
    

    检查 md 设备的状态。

    $ cat /proc/mdstat 
    Personalities : [raid1] 
    md0 : active raid1 sdb2[1] sda2[0]
          1047918528 blocks super 1.2 [2/2] [UU]
          [>....................]  resync =  0.0% (1001728/1047918528) finish=69.6min speed=250432K/sec
          bitmap: 8/8 pages [32KB], 65536KB chunk
    
    unused devices: <none>
    

    在这种情况下,设备正在同步磁盘,这是正常的,可能会在下面的过程中继续在后台进行。

    2.4 对md设备进行分区

      sudo sgdisk -Z /dev/md0
      sudo sgdisk -n 1:0:0 -t 1:E6D6D379-F507-44C2-A23C-238F2A3DF928 -c 1:"Linux LVM" /dev/md0
    

    /dev/md0p1这会在设备上创建一个单独的分区/dev/md0。UUID 字符串标识分区是 LVM 分区。

    2.3 创建LVM设备

    • 在 md 设备上创建物理卷

      sudo pvcreate /dev/md0p1
      
    • 在物理卷上创建卷组

      sudo vgcreate vg0 /dev/md0p1
      
    • 在新卷组上创建逻辑卷(分区)。下面的尺寸和名称是我的选择。你可能会做出不同的决定。

      sudo lvcreate -Z y -L 25GB --name root vg0
      sudo lvcreate -Z y -L 10GB --name tmp vg0
      sudo lvcreate -Z y -L 5GB --name var vg0
      sudo lvcreate -Z y -L 10GB --name varlib vg0
      sudo lvcreate -Z y -L 200GB --name home vg0
      

    现在,分区已准备好用于 Ubuntu 安装程序。

    3.运行安装程序

    • 双击Install Ubuntu 20.04.2.0 LTS新计算机桌面上的图标。(不要通过任何 ssh 连接启动安装程序!)
    • 回答语言和键盘问题。
    • 在Installation type页面上,选择Something else。(这是重要的部分。)这将为您提供一个名为/dev/mapper/vg0-home等的分区列表。
    • 双击以 开头的每个分区/dev/mapper/vg0-。选择Use as: Ext4,选中该Format the partition框,然后选择适当的挂载点(/for vg0-root、/homeforvg0-home等、/var/libfor vg0-varlib)。
    • /dev/sda为引导加载程序选择第一个设备。
    • 按Install Now并继续安装。
    • 安装完成后,选择Continue Testing。

    在终端中,运行lsblk. 输出应该是这样的:

    $ lsblk
    NAME               MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    ...
    sda                  8:0    0  1000G  0 disk  
    ├─sda1               8:1    0   512M  0 part  
    └─sda2               8:2    0 999.5G  0 part  
      └─md0              9:0    0 999.4G  0 raid1 
        └─md0p1        259:0    0 999.4G  0 part  
          ├─vg0-root   253:0    0    25G  0 lvm   /target
          ├─vg0-tmp    253:1    0    10G  0 lvm   
          ├─vg0-var    253:2    0     5G  0 lvm   
          ├─vg0-varlib 253:3    0    10G  0 lvm   
          └─vg0-home   253:4    0   200G  0 lvm   
    sdb                  8:16   0  1000G  0 disk  
    ├─sdb1               8:17   0   512M  0 part  
    └─sdb2               8:18   0 999.5G  0 part  
      └─md0              9:0    0 999.4G  0 raid1 
        └─md0p1        259:0    0 999.4G  0 part  
          ├─vg0-root   253:0    0    25G  0 lvm   /target
          ├─vg0-tmp    253:1    0    10G  0 lvm   
          ├─vg0-var    253:2    0     5G  0 lvm   
          ├─vg0-varlib 253:3    0    10G  0 lvm   
          └─vg0-home   253:4    0   200G  0 lvm   
    ...
    

    如您所见,安装程序将已安装的系统根目录挂载到/target. 但是,未安装其他分区。更重要的mdadm是,尚未安装系统的一部分。

    4.将mdadm添加到目标系统

    4.1 chroot进入目标系统

    首先,我们必须挂载未挂载的分区:

    sudo mount /dev/mapper/vg0-home /target/home
    sudo mount /dev/mapper/vg0-tmp /target/tmp
    sudo mount /dev/mapper/vg0-var /target/var
    sudo mount /dev/mapper/vg0-varlib /target/var/lib
    

    接下来,绑定一些设备,准备chroot...

    cd /target
    sudo mount --bind /dev dev 
    sudo mount --bind /proc proc
    sudo mount --bind /sys sys
    

    ...并chroot进入目标系统。

    sudo chroot .
    

    4.2 更新目标系统

    现在我们在目标系统内部。安装mdadm

    apt install mdadm
    

    如果出现 dns 错误,请执行

    echo "nameserver 1.1.1.1" >> /etc/resolv.conf 
    

    并重复

    apt install mdadm
    

    您可以忽略任何有关管道泄漏的警告。

    检查配置文件/etc/mdadm/mdadm.conf。它应该在结尾附近包含一条线,类似于

    ARRAY /dev/md/0 metadata=1.2 UUID=7341825d:4fe47c6e:bc81bccc:3ff016b6 name=ubuntu:0
    

    删除name=...部分以使该行看起来像

    ARRAY /dev/md/0 metadata=1.2 UUID=7341825d:4fe47c6e:bc81bccc:3ff016b6
    

    更新内核应在启动时加载的模块列表。

    echo raid1 >> /etc/modules
    

    更新启动 ramdisk

    update-initramfs -u
    

    最后退出chroot

    exit
    

    5.克隆EFI分区

    现在安装的目标系统就完成了。此外,通过 RAID 设备保护主分区免受单个磁盘故障的影响。但是,EFI 引导分区不受 RAID 保护。相反,我们将克隆它。

    sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4096
    

    跑

    $ sudo blkid /dev/sd[ab]1
    /dev/sda1: UUID="108A-114D" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="ccc71b88-a8f5-47a1-9fcb-bfc960a07c16"
    /dev/sdb1: UUID="108A-114D" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="fd070974-c089-40fb-8f83-ffafe551666b"
    

    请注意,FAT UUID 相同,但 GPT PARTUUID 不同。

    6.将第二个磁盘的EFI分区插入引导链

    最后,我们需要将第二个磁盘上的 EFI 分区插入到引导链中。为此,我们将使用efibootmgr.

    sudo apt install efibootmgr
    

    跑

    sudo efibootmgr -v
    

    并研究输出。应该有一条类似于

    Boot0005* ubuntu HD(1,GPT,ccc71b88-a8f5-47a1-9fcb-bfc960a07c16,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
    

    注意后面的路径File。跑

    sudo efibootmgr -c -d /dev/sdb -p 1 -L "ubuntu2" -l '\EFI\ubuntu\shimx64.efi'
    

    /dev/sdb在分区 1 上创建一个与该条目具有相同路径的新引导ubuntu条目。重新运行

    sudo efibootmgr -v
    

    并验证是否存在ubuntu2与以下路径相同的第二个条目ubuntu:

    Boot0005* ubuntu  HD(1,GPT,ccc71b88-a8f5-47a1-9fcb-bfc960a07c16,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
    Boot0006* ubuntu2 HD(1,GPT,fd070974-c089-40fb-8f83-ffafe551666b,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
    

    此外,请注意,每个条目的 UUID 字符串与上面相应的 PARTUUID 字符串相同。

    7.重启

    现在我们准备重新启动。检查同步过程是否已完成。

    $ cat /proc/mdstat 
    Personalities : [raid1] 
    md0 : active raid1 sdb2[1] sda2[0]
          1047918528 blocks super 1.2 [2/2] [UU]
          bitmap: 1/8 pages [4KB], 65536KB chunk
    
    unused devices: <none>
    

    如果同步仍在进行中,应该可以重新启动。但是,我建议等到同步完成后再重新启动。

    重新启动后,系统应该可以使用了!此外,如果任何一个磁盘发生故障,系统将使用健康磁盘中的 UEFI 分区并在md0设备处于降级模式时启动 ubuntu。

    8. grub-efi-amd64更新后更新EFI分区

    更新软件包时grub-efi-amd64,EFI 分区(安装在/boot/efi)上的文件可能会更改。在这种情况下,必须手动将更新克隆到镜像分区。幸运的是,您应该会收到grub-efi-amd64即将更新的更新管理器的警告,因此您不必在每次更新后进行检查。

    8.1 查找克隆源,快捷方式

    如果更新后没有重新启动,请使用

    mount | grep boot
    

    找出挂载的 EFI 分区。该分区通常/dev/sdb1应用作克隆源。

    8.2 找出克隆源,偏执方式

    创建挂载点并挂载两个分区:

    sudo mkdir /tmp/sda1 /tmp/sdb1
    sudo mount /dev/sda1 /tmp/sda1
    sudo mount /dev/sdb1 /tmp/sdb1
    

    在每棵树中查找最新文件的时间戳

    sudo find /tmp/sda1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sda1
    sudo find /tmp/sdb1 -type f -printf '%T+ %p\n' | sort | tail -n 1 > /tmp/newest.sdb1
    

    比较时间戳

    cat /tmp/newest.sd* | sort | tail -n 1 | perl -ne 'm,/tmp/(sd[ab]1)/, && print "/dev/$1 is newest.\n"'
    

    应该打印/dev/sdb1 is newest(很可能)或/dev/sda1 is newest. 该分区应用作克隆源。

    在克隆之前卸载分区以避免缓存/分区不一致。

    sudo umount /tmp/sda1 /tmp/sdb1
    

    8.3 克隆

    如果/dev/sdb1是克隆源:

    sudo dd if=/dev/sdb1 of=/dev/sda1
    

    如果/dev/sda1是克隆源:

    sudo dd if=/dev/sda1 of=/dev/sdb1
    

    完毕!

    9. 虚拟机陷阱

    如果您想先在虚拟机中进行尝试,有一些注意事项:显然,保存 UEFI 信息的 NVRAM 在重启之间会被记住,但不会在关机-重启周期之间被记住。在这种情况下,您可能最终会进入 UEFI Shell 控制台。以下命令应该从/dev/sda1(FS1:用于/dev/sdb1)引导您进入您的机器:

    FS0:
    \EFI\ubuntu\grubx64.efi
    

    在 virtualbox中 UEFI 启动的最佳答案中的第一个解决方案- Ubuntu 12.04也可能会有所帮助。

    • 3
  2. Les Hatton
    2022-04-05T03:11:38+08:002022-04-05T03:11:38+08:00

    道歉。我的反馈显然不清楚,所以又来了。问题是“是否有人有一个适用于 20.04 的进程,在 UEFI 机器的 RAID 1 之上使用 LVM?”

    我的“答案”是步骤 1-7 中给出的说明既准确又合适——非常感谢——但我在 20.04 上遇到了困难,因为它不支持我现代主板的 XID 641 板载显卡。我尝试使用 21.10 桌面,完全没有问题。请注意,我事先在 BIOS 中将 SATA 从 RAID 切换到 AHCI,并在步骤 7 中等待同步完成,否则,这是一个轻松的过程。目标机器是 Ryzen 9 5950X,ASUS Crosshair VIII Hero 主板,2x8TB 光盘。

    • 0

相关问题

  • 如何在 Windows 7 中运行 Ubuntu?

  • 如何检查/修改预装系统上的 LVM 状态?

  • 您对台式机和家庭服务器的驱动器分区方案有什么建议?[关闭]

  • 安装时,我可以选择加密我的主文件夹——这是做什么的?

  • 在不使用标准升级系统的情况下升级有哪些替代方案?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve