如何将子卷移动到 btrfs 中的新驱动器?

如何将子卷移动到 btrfs 中的新驱动器?

我正在尝试将 /srv、/var/lib/mysql 和 /home 目录移动到另一个驱动器(带有 RAID1 的更大驱动器)。我研究了如何执行此操作,并且我完成了大部分操作。但是,在复制所有内容后,我无法将新驱动器中的新快照替换为默认使用的快照。有没有人能帮我指出正确的方向?请注意,步骤 #5 是我遇到的问题。

准备:

fstab 当前如下所示:

    # grep srv /etc/fstab
    UUID=0888211b-2636-4eb5-97da-52679d93a275  /srv                    btrfs  subvol=/@/srv                 0  0

文件系统总体如下所示。第一个驱动器不是 RAID。第二个驱动器是 RAID1

# btrfs filesystem show
Label: 'ROOT'  uuid: 0888211b-2636-4eb5-97da-52679d93a275      <-- source drive
        Total devices 1 FS bytes used 16.05GiB
        devid    1 size 40.00GiB used 17.05GiB path /dev/sdd3

Label: none  uuid: 273dbdbd-16d9-4ae4-bde7-d30a48474a44        <-- destination drive
        Total devices 2 FS bytes used 799.20MiB
        devid    1 size 7.28TiB used 2.01GiB path /dev/sda
        devid    2 size 7.28TiB used 2.01GiB path /dev/sdc

以及子卷列表,因为每个驱动器已经有子卷

# btrfs subvolume list / |grep srv
ID 260 gen 12751 top level 256 path @/srv
# btrfs subvolume list /data-1
ID 258 gen 226 top level 5 path subvol-1
ID 261 gen 225 top level 258 path .snapshots

因此我执行了以下步骤:

1 创建了 /srv 的只读快照

# btrfs subvolume snapshot -r /srv /srv_snap
Create a readonly snapshot of '/srv' in '//srv_snap'
# btrfs subvolume list / |grep srv
ID 260 gen 12784 top level 256 path @/srv
ID 526 gen 12784 top level 267 path srv_snap
# btrfs filesystem sync /

2 将只读快照发送到挂载为 /data-1 的新驱动器

# btrfs send /srv_snap | btrfs receive /data-1
At subvol /srv_snap
At subvol srv_snap
# btrfs subvolume list /data-1
ID 258 gen 226 top level 5 path subvol-1
ID 261 gen 225 top level 258 path .snapshots
ID 332 gen 227 top level 258 path srv_snap

3 现在将此只读副本重命名为所需名称,并使其变为读写

# btrfs filesystem sync /data-1
# btrfs subvolume snapshot /data-1/srv_snap /data-1/@srv    
Create a snapshot of '/data-1/srv_snap' in '/data-1/@srv'
# btrfs subvolume list /data-1  |grep srv               
ID 333 gen 233 top level 258 path srv_snap
ID 334 gen 233 top level 258 path @srv

4 删除了不必要的快照

# btrfs subvolume delete /data-1/srv_snap /srv_snap
Delete subvolume (no-commit): '/data-1/srv_snap'
Delete subvolume (no-commit): '//srv_snap'

5 现在我想通过 btrfs 方式将 fstab 中的 /srv 分区详细信息替换为新分区详细信息。这就是我陷入困境的地方

# btrfs replace start /dev/sdd3 /data-1 /srv
probe of /data-1 failed, cannot detect existing filesystem.
ERROR: use the -f option to force overwrite of /data-1

如果重要的话,相关的版本号:

# btrfs version
btrfs-progs v5.7 
#cat /etc/os-release 
NAME="openSUSE Tumbleweed"
# VERSION="20200905"
ID="opensuse-tumbleweed"
ID_LIKE="opensuse suse"
VERSION_ID="20200905"
PRETTY_NAME="openSUSE Tumbleweed"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:tumbleweed:20200905"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
LOGO="distributor-logo"

答案1

我不清楚你最后一步。我认为你已经将数据从 btrfs 阵列 A 移动到了 B。

您曾经使用

UUID=0888211b-2636-4eb5-97da-52679d93a275  /srv                    btrfs  subvol=/@/srv                 0  0

因此您应该将 /etc/fstab 中的这一行替换为

uuid=273dbdbd-16d9-4ae4-bde7-d30a48474a44 /srv  btrfs  subvol=/@srv 0 0

您需要更改 UUID,然后引用子卷。

replace 命令用于从阵列中删除磁盘。我不太明白你在做什么。

相关内容