Как запускать команду при обнаружении ошибок EXT4?

Я испытал некоторые проблемы в последние дни. Мой корневой раздел был случайным образом изменен RO (только для чтения), когда были обнаружены некоторые ошибки ext4.

У меня есть еще один HDD, установленный на / MNT / файлы , и все в этом каталоге синхронизируется с помощью NextCloud.

Когда корневая файловая система вымонтирована только для чтения, NextCloud начал случайно удалять мои данные. Это не проблема, насколько я всегда могу восстановить файлы из Trashbin на моем сервере. Процесс восстановления занимает много времени, поэтому я хотел немедленно убить NextCloud Clooud, когда Root FilesSystem remounts, чтобы предотвратить дополнительные потери данных.

Можно ли запустить killall NextCloud , когда он намонтирует RO ?

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

0
задан 11 February 2021 в 13:07

1 ответ

Можно просмотреть файлы .manifest , доступные на той же странице. Вы увидите, что разница заключается в используемом ядре. Вариант disk-kvm.img имеет linux-image-kvm 5,8,0,1018,20 , в то время как другой образ имеет linux-image-5.8.0-43-generic .

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

Второе - универсальное ядро, работающее везде. Вы могли бы использовать эти изображения, например, для развертывания новой голой системы с ними или в любом другом месте, где linux-kvm представляет ограничение, которое вы не хотите.

Если вы сомневаетесь и вам придется выбрать только один, то неквм образ должен работать везде.

Здесь вы можете прочитать больше о вариантах ядра Ubuntu

-121--910359-

Для этого вида операции на основе оболочки Unix я использовал Pssh (Parallel ssh) это позволяет создавать списки серверов, а затем ssh команды выдает им запросы параллельно с помощью нескольких потоков.

Для установки на Ubuntu 20.04 и 20.10 просто запустите

sudo apt install pssh

Пакет включает команду pssh для этой цели.
Пример Создайте файл hosts/cluster (скажем, myCluster.hosts)

192.168.0.100:2222
192.168.0.101:22
192.168.0.102:22

Затем этот файл с помощью команды pssh выполняет команду 'uptime' на каждом хосте.

parallel-ssh -h myCluster.hosts uptime
[1] 16:09:03 [SUCCESS] 192.168.0.100:2222 16:09:01 up  1:00,  2 users,  load average: 0.07, 0.02, 0.00
[2] 16:09:03 [SUCCESS] 192.168.0.101:22 06:39:03 up  1:00,  2 users,  load average: 0.00, 0.06, 0.09
[3] 16:09:03 [SUCCESS] 192.168.0.102:22 08:00:01 up  1:00,  8 users,  load average: 0.00, 0.09, 0.18

Пакет также поставляется с параллельными версиями scp, rsync и т.д. очень мощные инструменты. Рекомендуется сначала использовать параметр сухого прогона/тестирования на одной машине, чтобы избежать разрыва всего кластера.

-121--910329-

Это можно решить с помощью systemd , если вы хотите проверять каждые 15 минут, доступна ли ваша корневая файловая система только для чтения или нет:

  • Создайте сценарий, проверяющий файловую систему, и сделайте ее исполняемой:
#!/bin/sh

unset $rootfs
unset $status
rootfs=SDXn #Replace with sda1 eg.

grep -E ''$rootfs'.*\ ro' /proc/mounts 2>&1 > /dev/null
status=$?

if [ $status = 0 ];
    then
        echo "$rootfs is not okay"
        killall nextcloud
        exit 1
    else
        echo "$rootfs is okay"
        exit 0
fi
  • Создайте системную службу в /lib/systemd/system/:
[Unit]
Description=Kill nextcloud client when filesystem is read-only

[Service]
Type=oneshot
ExecStart=/path/to/script.sh
  • Создайте системный таймер в /lib/systemd/system/ и включите/начните с systemctl [enable 'start] name_of_file.timer:
[Unit]
Description=Kill nextcloud client when filesystem is read-only

[Timer]
OnCalendar=*:0/15

[Install]
WantedBy=timers.target

Обратите внимание, что файлы .timer и .service должны иметь одинаковые имена.

0
ответ дан 18 March 2021 в 23:35

Другие вопросы по тегам:

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