小编Han*_*gon的帖子

Btrfs RAID1:如何更换物理上不再存在的磁盘驱动器?

我有一个 btrfs RAID1 系统,其状态如下:

# btrfs filesystem show
Label: none  uuid: 975bdbb3-9a9c-4a72-ad67-6cda545fda5e
        Total devices 2 FS bytes used 1.65TiB
        devid    1 size 1.82TiB used 1.77TiB path /dev/sde1
        *** Some devices missing
Run Code Online (Sandbox Code Playgroud)

丢失的设备是一个完全失败的磁盘驱动器,操作系统无法再识别它。我取出了故障磁盘并将其送去回收。

现在我在 /dev/sdd 下安装了一个新磁盘。在网上搜索时,我找不到这种情况的说明(搜索词选择不当?)。有许多示例如何在故障磁盘仍然可以被操作系统访问时保存 RAID 系统。 btrfs replace命令需要源磁盘。

我尝试了以下方法:

# btrfs replace start 2 /dev/sdd /mnt/brtfs-raid1-b
# btrfs replace status /mnt/brtfs-raid1-b
Never started
Run Code Online (Sandbox Code Playgroud)

没有错误消息,但状态表明它从未启动。我无法弄清楚我的尝试有什么问题。

我正在运行 Ubuntu 16.04 LTS Xenial Xerus,Linux 内核 4.4.0-57-generic。

更新 #1

好的,在“非后台模式(-B)”下运行命令时,我看到了一个以前没有出现过的错误:

# btrfs replace start -B 2 /dev/sdd /mnt/brtfs-raid1-b                                                                                                                     
ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/brtfs-raid1-b": …
Run Code Online (Sandbox Code Playgroud)

btrfs replace raid1 disk

7
推荐指数
2
解决办法
9872
查看次数

bash - extglob 第二个“零个或多个”运算符不工作

鉴于:

$ shopt -s extglob
$ TEST="    z abcdefg";echo ">>${TEST#*( )z*( )}<<"
>> abcdefg<<
Run Code Online (Sandbox Code Playgroud)

为什么字母“a”前有一个空格?我希望第二个*( )会匹配空间,但它并没有接缝这样做。

我期望相当于:

$ echo ">>$(echo -n "${TEST}" | perl -pe "s/^ *z *//g")<<"
>>abcdefg<<
Run Code Online (Sandbox Code Playgroud)

*( )如果我指定下一个字符(即“a”),则第二个匹配项:

$ shopt -s extglob
$ TEST="    z abcdefg";echo ">>${TEST#*( )z*( )a}<<"
>>bcdefg<<
Run Code Online (Sandbox Code Playgroud)

bash 版本: GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

shell bash wildcards variable-substitution

3
推荐指数
2
解决办法
357
查看次数

标签 统计

bash ×1

btrfs ×1

disk ×1

raid1 ×1

replace ×1

shell ×1

variable-substitution ×1

wildcards ×1