btrfs не может подключиться, потому что операция замены устройства продолжается

364
Taryck Bensiali

Я переносил данные с диска на новый. Тем не менее, новый Seagate IronWolf 12Tb имеет проблемы (может быть слишком чувствительным к выходному напряжению). Тем не менее операция «Заменить» останавливается на сообщении, которое я не потратил на это время.

Поэтому мне пришлось перезагрузиться, чтобы удалить диск Seagate. Я выполняю проверку btrfs на исходном диске, который заканчивается без ошибок, останавливаю сервер, удаляю диск de 12Tb и перезагружаюсь ...

С ошибкой загрузки, поскольку мое устройство btrfs не будет монтироваться с:

mount: wrong fs type, bad option, bad superblock on /dev/sdd1, missing codepage or helper program, or other error  In some cases useful info is found in syslog - try dmesg | tail or so. 

Поэтому я выполняю (как и следовало): dmesg | Хвост и получить:

[ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled [ 2833.182515] BTRFS info (device sdd1): has skinny extents [ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and [ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'? [ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5 [ 2833.339466] BTRFS: open_ctree failed 

Что ж, я согласен с ситуацией, однако для «btrfs replace cancel» требуется точка монтирования. И система отказывается монтировать ... собака смотрит на свой хвост.

usage: btrfs replace cancel <mount_point> 

Я сделал много поиска и не нашел никакого жизнеспособного решения. Я ищу "операция замены продолжается", и я надеюсь найти страницу с исходным кодом: dev-replace.c, где, если найден этот блок кода:

 /* * allow 'btrfs dev replace_cancel' if src/tgt device is * missing */ if (!dev_replace->srcdev && !btrfs_test_opt(dev_root, DEGRADED)) { ret = -EIO; pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "srcdev (devid %llu) is missing, need to run 'btrfs dev scan'?\n", (unsigned long long)src_devid); } if (!dev_replace->tgtdev && !btrfs_test_opt(dev_root, DEGRADED)) { ret = -EIO; pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "tgtdev (devid %llu) is missing, need to run btrfs dev scan?\n", (unsigned long long)BTRFS_DEV_REPLACE_DEVID); 

}

Не является небольшим советом, что «официальная» причина ошибки заключается в том, что объем btrfs ухудшается . Надеюсь, я читал эту страницу в то же время: используя Btrfs с несколькими устройствами, где я читал:

Замена неисправных устройств

Использование btrfs заменить

Если у вас есть устройство, которое находится в процессе сбоя или вышло из строя в массиве RAID, вы должны использовать команду btrfs replace, а не добавлять новое устройство и удалять отказавшее. Это более новая методика, которая работала для меня, когда добавление и удаление устройств не помогали, однако, может быть полезно проконсультироваться со списком рассылки irc канала перед попыткой восстановления.

Сначала перечислите устройства в файловой системе, в этом примере у нас есть одно отсутствующее устройство, которое мы заменим новым диском того же размера. В следующем выводе мы видим, что последний номер устройства (который отсутствует) - это устройство 6:

enter code here  user@host:~$ sudo btrfs filesystem show Label: none uuid: 67b4821f-16e0-436d-b521-e4ab2c7d3ab7 Total devices 6 FS bytes used 5.47TiB devid 1 size 1.81TiB used 1.71TiB path /dev/sda3 devid 2 size 1.81TiB used 1.71TiB path /dev/sdb3 devid 3 size 1.82TiB used 1.72TiB path /dev/sdc1 devid 4 size 1.82TiB used 1.72TiB path /dev/sdd1 devid 5 size 2.73TiB used 2.62TiB path /dev/sde1 *** Some devices missing 

Это не моя точная ситуация, так как у меня нет "*** Некоторые устройства отсутствуют", однако это довольно близко. Я прочитал следующее:

Если устройство присутствует, тогда проще определить требуемый числовой идентификатор устройства.

Перед заменой устройства вам необходимо смонтировать массив, если у вас отсутствует устройство, вам нужно будет использовать следующую команду:

sudo mount -o degraded /dev/sda1 /mnt 

Здесь это был способ смонтировать деградированные btrfs, чтобы отменить прерванную операцию замены.

0

1 ответ на вопрос

0
Taryck Bensiali

Так что вот его полное решение:

[root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/ mount: wrong fs type, bad option, bad superblock on /dev/sdd1, missing codepage or helper program, or other error  In some cases useful info is found in syslog - try dmesg | tail or so. [root@home disk]# dmesg | tail [ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled [ 2833.182515] BTRFS info (device sdd1): has skinny extents [ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and [ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'? [ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5 [ 2833.339466] BTRFS: open_ctree failed [root@home disk]# btrfs replace cancel btrfs replace cancel: too few arguments usage: btrfs replace cancel <mount_point>  Cancel a running device replace operation.  [root@home disk]# btrfs replace cancel /store/backup_big_btrfs ERROR: not a btrfs filesystem: /store/backup_big_btrfs [root@home disk]# mount -o degraded /dev/sdd1 /store/backup_big_btrfs/ [root@home disk]# btrfs replace cancel /store/backup_big_btrfs/ [root@home disk]# umount /store/backup_big_btrfs/ [root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/ 

Если вы не можете смонтировать btrfs из-за неудачной операции замены, тогда:

  1. Проверь свой btrfs громкость
  2. смонтировать его с опцией -o ухудшено
  3. отменить операцию замены
  4. размонтировать том btrfs
  5. смонтировать без какой-либо опции

Похожие вопросы