Bcache 似乎需要 update-initramfs

Bcache 似乎需要 update-initramfs

我正在 ubuntu 20.04 上设置 bcache。

从安装 CD 启动,我通过以下方式创建了一个 bcache 驱动器:

#modprobe bcache
#make-bcache -B /dev/mapper-vgubuntu-root
#make-bcache -C /dev/sdb

#fdisk -l就在那之后/dev/bcache0。然后#mkfs.ext4 /dev/bcache0

并将所有文件从 backup.tar 放回到 的根目录/dev/bcache

编辑 /etc/fstab 如下:

UUID=------- / ext4 erros=remount-ro 0 1

然后我通过以下方式更新了 grub:

#mount -t ext4 /dev/bcache /mnt
#munt -B /dev /mnt/dev
#mount -B /proc /mnt/proc
#mount -B /sys /mnt/sys
#grub-install --recheck /dev/sda
#update-grub

然后我尝试从新的 root 重新启动系统/dev/bcache0。但是,它陷入了grub-rescue>

说“未知的文件系统 UUID=-----”。

我从安装CD重新启动了系统,并检查系统是否识别了/dev/bcahe0

#fdisk -l显示系统启动后无法识别它。

然后

#modprobe bcache
#echo /dev/dm-0 > /sys/fs/bcache/register
#echo /dev/sdb > /sys/fs/bcache/register

通过这些命令fdisk -l显示/dev/bcache0

/dev/mapper/vgubuntu-root被公认为/dev/dm-0

从上述情况来看,我认为我必须更新 initrd.img 以在挂载文件系统之前执行上述脚本。

所以我补充道缓存/etc/initramfs-tools/模块

并将以下脚本写入/etc/initramfs-tools/scripts/init-premount/

#! /bin/sh
echo /dev/dm-0 > /sys/fs/bcache/register
echo /dev/sdb > /sys/fs/bcache/register

我将文件命名为10_bcache

最后我update-initramfs重新启动了系统,但是系统仍然无法识别/dev/bcache0并进入 grub 救援模式。

我应该如何更新initramfs才能在系统挂载文件系统之前识别bcache设备。

答案1

我自己已经解决了这个问题。问题的原因是/boot由于我使用默认设置安装了 20.04,所以它被放在了 bcache 驱动器中。除非加载了 initrd.img,否则无法识别 bcache 驱动器,并且 grub 无法/boot在其中找到它。

现在我把它放在/bootbcache 驱动器外面,grub 可以找到它并启动系统。

以下是我设置 bcache 的方式。

首先,我使用 fdisk 手动对硬盘进行分区。

Device       Start       End   Sectors   Size Type
/dev/sda1     2048      4095      2048     1M BIOS boot
/dev/sda2     4096   1054719   1050624   513M EFI System
/dev/sda3  1054720   3151871   2097152     1G Linux filesystem
/dev/sda4  3151872 976773134 973621263 464.3G Linux filesystem

其次,逻辑卷的创建者是:

# pvcreate /dev/sda4
# vgcreate vgubuntu /dev/sda4
# lvcreate -L 12Gi -n swap1 vgubutu
# lvcreate -l 100%FREE -n root vgubuntu

fdisk -l显示结果:

Disk /dev/mapper/vgubuntu-swap1: 12 GiB, 12884901888 bytes, 25165824 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/vgubuntu-root: 452.26 GiB, 485608128512 bytes, 948453376 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

然后通过以下方式创建 bcache 驱动器:

# apt install bcache-tools
# modprobe bcache
# make-bcache -B /dev/mapper/vgubuntu-root -C /dev/sdc

/dev/sdc是SSD。

fdisk -l显示:

Disk /dev/bcache0: 452.26 GiB, 485608120320 bytes, 948453360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x91af541f

为了在/dev/bcache0 其中安装系统而创建的分区fdisk /dev/bcache0fdisk -l显示:

Device         Boot Start       End   Sectors   Size Id Type
/dev/bcache0p1       2048 948453359 948451312 452.3G 83 Linux

经过上述准备后,我使用安装程序中的高级磁盘设置菜单安装了系统,其中我将挂载点设置如下。

/dev/sda1                       biosgrub
/dev/sda2                       EFI system
/dev/sda3                  ext2 /boot
/dev/mapper/vgubuntu-swap1 swap
/dev/bcache0p1             ext4 /

安装完成后,我重建了 initramfs,以便系统在挂载根文件系统之前识别 bcache 驱动器。我编辑了一个文件并在中添加了一个脚本/etc/initramfs-tools/

/etc/initramfs-tools/modules

# List of modules that you want to include in your initramfs.
# They will be loaded at boot time in the order below.
#
# Syntax:  module_name [args ...]
#
# You must run update-initramfs(8) to effect this change.
#
# Examples:
#
# raid1
# sd_mod
#
bcache

/etc/initramfs-tools/scripts/init-premount/10_bcache

#! /bin/sh
#
# Backing Device
echo /dev/mapper/vgubuntu-root > /sys/fs/bcache/register
# Cashing Device
echo /dev/sdc > sys/fs/bcache/register

根据以上设置# update-initramfs就完成了。

如果没有后面这个脚本,系统就会陷入 BusyBox 中,你必须手动执行上述脚本,因为 bcache 驱动器只有在执行脚本后才会出现。我从https://wiki.archlinux.org/index.php/Bcache

并且/etc/fstab是:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
#
# boot
/dev/sda3                               /boot   ext2    defaults        0   0
#
# swap
UUID=840f9099-58a2-45e5-958b-61becd00eabd none  swap    sw              0   0
#
# bcache root /dev/bcache0p1
UUID=bfff7e4c-c94d-4008-8f6e-0a82f41ccddf /     ext4    errors=remount-ro 0  1
#

# external 500GB SDD
UUID=2757914a-06df-4fbb-9364-2d14bb222766 /mnt/workstation ext4 defaults 0  0

这是我为了让 bcache 在我的系统中工作而做的所有事情。这些比使用 lvm 或 mdadm 要复杂得多。第一个原因是 bcache 驱动器用于根文件系统,必须在 initramfs 挂载文件系统之前识别它。此外,initramfs 必须放在 bcache 驱动器之外的普通单独驱动器中。

因此,如果您使用除根文件系统之外的 bcache 驱动器(例如)/home,它会容易得多。

相关内容