Сценарий для проверки на файловую систему только для чтения

Самый легкий способ сделать это состоит в том, чтобы включать сценарий оболочки в /etc/bash_completion.d/. Базовая структура этого файла является простой функцией, которая выполняет завершение и затем вызов complete который является встроенным ударом. Вместо того, чтобы вдаваться в подробности о том, как использовать complete, Я предполагаю, что Вы читаете Введение в Завершение Bash. Часть 1 покрывает основы, и Часть 2 входит, как Вы пошли бы о записи сценария завершения.

Более плотное описание завершения удара может быть найдено в разделе "Programmable Completion" man bash (можно ввести "/Программируемое Завершение" и затем нажать 'n' несколько раз для получения там быстро. Или, если Вы чувствуете удачу, "ВОЗВРАТ g 2140").

6
14.10.2011, 16:46
8 ответов
awk '$4~/(^|,)ro($|,)/' /proc/mounts
10
27.01.2020, 20:20
  • 1
    я понимаю awk, но не 'nosuid' часть. Можно ли объяснить немного больше? –  user11496 12.10.2011, 12:30
  • 2
    @user11496: Я имел в виду "ro" - я неправильный вставляемый мой тестовый код. Я исправил свой ответ. –  Teddy 12.10.2011, 14:45

Если Вы, намерение состоит в том, чтобы найти файловые системы с проблемами (т.е. монтирующееся состояние был изменен на ТОЛЬКО ДЛЯ ЧТЕНИЯ из-за ошибки файловой системы), то я сделаю следующее (принимающий расширение* файловые системы):

 tune2fs -e panic [raw-disk-partition-name]

EX:

 tune2fs -e panic /dev/sda1

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

4
27.01.2020, 20:20
  • 1
    Это не рассматривает вопрос. Плакат не спрашивает, как зафиксировать файловые системы, они спрашивают, как найти файловые системы только для чтения. Кроме того, создание системной паники является действительно плохим способом пойти о фиксации поврежденной файловой системы. –  Tim 13.11.2014, 11:18
  • 2
    К сожалению, файловые системы только для чтения, должные запаниковать, не отмечены как "ro" утилитой монтирования. Таким образом, это - по крайней мере, ценный указатель в полезном направлении. –  Willem 07.01.2015, 16:19

Я использовал следующее в прошлом

grep ' ro ' /proc/mounts

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

grep ' ro ' /proc/mounts | grep -v ':'

Также можно хотеть пропустить вещи, которые смонтированы через автомонтирование

grep ' ro ' /proc/mounts | egrep -v 'automount|autofs'
3
27.01.2020, 20:20

Просто ищите ro смонтируйте опцию.

-1
27.01.2020, 20:20
  • 1
    Это miscatches любая строка с "ro" в нем, включая что-либо с "errors=remount-ro" опцией. –  Teddy 12.10.2011, 11:16
  • 2
    Таким образом используйте более сложный regex. –  Ignacio Vazquez-Abrams 12.10.2011, 11:19

Подход, который работает даже на удаленные файловые системы (который может быть смонтирован rw, даже если они экспортируются ro, приводящий к файловой системе только для чтения) должен просто создать тестовый файл в каждой файловой системе и протестировать код возврата той команды.

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

0
27.01.2020, 20:20

Если вы используете bash в терминале под X11 (большинство людей), то вы можете вырезать и вставить с помощью мыши, никаких клавиш не требуется.

  • Щелкните левой кнопкой мыши и перетащите ее, чтобы выделить. При этом выделенный текст помещается в X11 основной выделенный фрагмент.

  • Чтобы вставить основной выделенный фрагмент, установите курсор в целевое окно и щелкните мышью по центру.

  • Вы можете взаимодействовать с выбором в командной строке с помощью xsel .

-121--129037-

Для копирования содержимого файлов из Linux на компьютер Windows. Можно использовать WINSCP. Установите WINSCP в окнах и используйте полномочия linux и наоборот для передачи файлов.

-121--175319-
cat /proc/mounts|sort|awk '{print $1 "\011" toupper(substr($4,0,2))}'

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

2
27.01.2020, 20:20

Как показывают другие ответы, вы можете проанализировать / proc / mounts с помощью grep или awk , например, вы можете перечислить монтирования только для чтения:

$ grep "\sro[\s,]" /proc/mounts

или

$ awk '$4~/(^|,)ro($|,)/' /proc/mounts

Альтернативой синтаксическому анализу содержимого / proc / mounts , которое вы можете попробовать, является

$  grep '^ro$' /proc/fs/*/<device>/options

, где <устройство> - имя узла устройства файловой системы в / dev .Например,

$ grep '^ro$' /proc/fs/*/sdc1/options

вернет ro , если / dev / sdc1 смонтирован только для чтения.

Если вы хотите проверить наличие блочного устройства только для чтения (вместо смонтированной файловой системы), вы можете использовать

$ cat /sys/block/<device>/ro

, который возвращает 1 , если файловая система доступна только для чтения, или 0 при чтении-записи.

Обратите внимание, что выше относится к узлу реального устройства. Если вы хотите проверить устройство символьной ссылки (например, созданное device-mapper или by-uuid ссылки), вы можете использовать basename и readlink , чтобы получить имя узла устройства. Как эти примеры:

$ grep '^ro$' /proc/fs/*/$(basename $(readlink -f /dev/mapper/foo)/options
$ cat /sys/block/$(basename $(readlink -f /dev/mapper/foo)/ro
1
27.01.2020, 20:20

Я немного опоздал, но вот как я справляюсь Это.

#!/bin/bash

FILE=/tmp/test.txt

# Check health of LXD host machine
touch ${FILE}

if [ -f ${FILE} ];
then
   rm ${FILE}
   echo "File System is Good!"
else
   message="File System is R/O !"
   echo ${message} >> /var/log/lxd/health.log >&2
   send_twilio "${TWILIO_ACCOUNT_SID}" "${TWILIO_ACCOUNT_TOKEN}" "${TWILIO_NUMBER}" "${to_twilio}" "${HOST}" "${message}"
0
27.01.2020, 20:20

Теги

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