我正在 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
在其中找到它。
现在我把它放在/boot
bcache 驱动器外面,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/bcache0
。
fdisk -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
,它会容易得多。