xfs _repair /dev/sdb + не удалось найти действительный вторичный суперблок

ПРЕДУПРЕЖДЕНИЕ:эти операции чрезвычайно рискованны, я не даю никаких гарантий, рекомендуется понимать каждый шаг и применять его на свой страх и риск, иначе вы, вероятно, сломаете свою систему и Я не несу ответственности за любой ущерб, возникший в результате его использования.

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

Некоторые системы используют systemd в initrd , после монтирования целевого корня он переключает среду systemd так же, как вы делаете с chroot, все службы отключаются, а затем перезапускаются в новой среде.

Мы могли бы воспользоваться этой функцией, чтобы снова изменить корень, сделав это в клонированной среде на другом диске, чтобы снять блокировки, которые система удерживает в старой среде, поэтому вы можете безопасно размонтировать эти точки -, на самом деле это в основном даже не монтируется. Но эта клонированная среда должна гарантировать правильную конфигурацию, чтобы снова запустить сеть и предоставить доступ по ssh. Если этого не произойдет, считайте себя обреченным.

Важно, чтобы у вас был отдельный раздел. Если вы выполняете chroot в каталог внутри другого раздела, а не на само устройство, система все равно может удерживать устройство родительского раздела. не блокировать никак.

Если у вас есть нераспределенное свободное пространство или вы можете уменьшить некоторые разделы, чтобы освободить место для клонированной среды, рекомендуется.Однако, если у вас нет свободного места для хранения, вы можете создать точку монтирования виртуальной памяти, если у вас достаточно памяти. Сетевой раздел не рекомендуется, так как соединение может быть потеряно во время процедуры.

Точку монтирования виртуальной памяти можно создать с помощью tmpfs, но это приведет к тому, что эта память будет заблокирована в старой среде, и вы не сможете освободить ее без rebootили kexec, лучший подход - использовать zram, помимо создания запоминающего устройства, оно сжимает данные, поэтому, если вы записываете 5Gданных, на самом деле они будут использовать намного меньше, чем память, но все же вам потребуется достаточно памяти.

Например, если 7Gдостаточно, вы можете создать его следующим образом:

sudo modprobe zram num_devices=4
echo 7G | sudo tee /sys/block/zram0/disksize
sudo mkfs.ext4 -m0 /dev/zram0

После подготовки необходимых разделов для клонированной среды вот как это будет работать:

mkdir /tmp/sys
sudo mount /dev/zram0 /tmp/sys # or the target device in place of zram0
# mount other separate partitions if required
sudo tar -cpSf - \
    --acls --xattrs --selinux \
    --exclude '/dev/*' \
    --exclude '/run/*' \
    --exclude '/sys/*' \
    --exclude '/proc/*' \
    --exclude '/tmp/*' \
    --exclude '/var/tmp/*' \
    --exclude '/var/run/*' \
    / |
    sudo tar -xvf - \
        --acls --xattrs --selinux \
        -C /tmp/sys

Перед переключением:

рекомендуется сделать резервную копию fstab.

sudo cp -a /tmp/sys/etc/fstab /tmp/sys/etc/fstab-
sudo truncate -s0 /tmp/sys/etc/fstab

Если вы собираетесь изменить раздел, в котором какое-либо устройство является swapпамятью, рекомендуется сначала отключить его:

sudo swapoff -a

Затем для выполнения chroot:

sudo mkdir /sysroot
sudo mount --rbind /tmp/sys /sysroot
sudo touch /etc/initrd-release
sudo systemctl --no-block isolate initrd-switch-root
# it will stop all other services (isolate) and call systemctl switch-root /sysroot

Обратите внимание, что не требуется связывать procи dev, как вы обычно делаете при выполнении chroot, systemd сделает это за вас. Вы можете потерять соединение, если вы подождете некоторое время, и оно все еще не сможет подключиться, примите мои соболезнования, вы были потрачены впустую.

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

Важно настроить путь устройства и uuid (blkid), чтобы они соответствовали новым:

sudo mv /etc/fstab- /etc/fstab
sudo vi /etc/fstab
sudo vi /etc/default/grub

После того, как вы внесли свои изменения, вы можете использовать ту же стратегию, чтобы вернуться к реальному корневому устройству, после чего не забудьте установить загрузчик для новой среды, чтобы восстановить его снова в случае выключения.:

sudo grub2-install /dev/sda # or the intended bootable disk
sudo grub2-mkconfig -o /etc/grub2.cfg

Как только вы снова переключитесь на свои физические устройства,если вы использовали zram, вы можете освободить память, следуя:

echo 1 | sudo tee /sys/block/zram0/reset
sudo modprobe -r zram

Помните, что вы делаете это на свой страх и риск.

0
10.08.2020, 13:39
1 ответ

Невозможно ответить на ваш вопрос, поскольку вы не предоставляете подробностей о своей проблеме. Что за поломка диска и что еще было сделано? И вы уверены, что XFS была на/dev/sdb(полном диске )вместо раздела? Это немного необычно.

Так что я просто хотел бы отметить, что вывод xfs_repair— это то, что вы получаете, запуская его на полностью нулевом устройстве, которое не является и никогда не было XFS.

# truncate -s 40M foobar.img
# losetup --find --show foobar.img 
/dev/loop0
# xfs_repair /dev/loop0
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!

attempting to find secondary superblock...
...........................Sorry, could not find valid secondary superblock
Exiting now.

Таким образом, если вы используете не то устройство или совершаете другую подобную ошибку, результат ничего не значит.

Такие инструменты, как xfs_repair, fsckи т. д., следует использовать с осторожностью, так как они могут нанести больший ущерб. В ситуации восстановления данных у вас всегда должна быть полная копия диска или копия -на слое записи -для экспериментов.

1
18.03.2021, 23:13

Теги

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