我有一个 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) 鉴于:
$ 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)