Как проверить, смонтирована ли файловая система с помощью сценария

Вопрос или проблема

Я новичок в скриптах … Я могу делать очень простые вещи, но сейчас мне нужна помощь.

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

Я начинаю с этого.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "Она смонтирована."
else
  echo "Она не смонтирована."; then
  mount $MOUNT;
fi

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

КОДЫ ВОЗВРАТА
       mount имеет следующие коды возврата (биты могут быть объединены):
       0      успех
       1      некорректный вызов или разрешения
       2      системная ошибка (недостаточно памяти, невозможно создать процесс, больше нет устройств цикла)
       4      внутренняя ошибка монтирования
       8      прерывание пользователем
       16     проблемы с записью или блокировкой /etc/mtab
       32     неудача монтирования
       64     некое монтирование успешно

Я не знаю, как это проверить. Есть ли какие-то указания?

Во многих дистрибутивах Linux есть команда mountpoint. Она может явно использоваться для проверки, является ли директория точкой монтирования. Просто так:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 является точкой монтирования"
else
    echo "$1 не является точкой монтирования"
fi

Вы можете проверить код состояния mount, а также большинство хорошо написанных исполняемых файлов, с помощью специального параметра оболочки ?.

Из man bash:

? Разворачивается в код завершения последнего выполненного конвейера в переднем плане.

После выполнения команды mount, немедленно выполнив echo $?, вы получите код состояния от предыдущей команды.

# mount /dev/dvd1 /mnt
  mount: нет диска на /dev/sr0
# echo $?
  32

Не все исполняемые файлы имеют четко определенные коды состояния. По крайней мере, они должны завершаться с кодом успеха (0) или неудачи (1), но это не всегда так.

Чтобы расширить (и исправить) ваш пример скрипта, я добавил вложенную конструкцию if для ясности. Это не единственный способ проверить код состояния и выполнить действие, но это самый простой способ чтения при обучении.

Обратите внимание на пробелы вокруг пути монтирования, чтобы гарантировать, что частичные пути не были сопоставлены.

#!/bin/bash
mount="/myfilesystem"

if grep -qs " $mount " /proc/mounts; then
  echo "Она смонтирована."
else
  echo "Она не смонтирована."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Монтирование прошло успешно!"
  else
   echo "Что-то пошло не так с монтированием..."
  fi
fi

Для получения дополнительной информации о “Выходе и статусе выхода” вы можете обратиться к Руководству по продвинутому Bash-скриптингу.

Еще один способ:

if findmnt "$MOUNT" >/dev/null 2>&1 ; then
  : # Сделайте что-то для положительного результата (выход 0)
else
  : # Сделайте что-то для отрицательного результата (выход 1)
fi

Самый простой способ, который не требует прав root:

if $(df | grep -q /mnt/ramdisk); then

fi

или, чтобы проверить, не смонтирована ли она:

if ! $(df | grep -q /mnt/ramdisk); then

fi

Короткие заявления

Проверьте если смонтировано:

mount|grep -q "/mnt/data" && echo "/mnt/data смонтировано; я могу продолжать свою работу!"

Проверьте если не смонтировано:

mount|grep -q "/mnt/data" || echo "/mnt/data не смонтировано, я, вероятно, могу его смонтировать!"

Я попробовал следующий скрипт

#!/bin/bash
echo "введите файловую систему, чтобы проверить, смонтирована она или нет"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p смонтирована"
else
echo "$p не смонтирована"
fi
done

Единственный ввод, который вам нужно дать, это имя файловой системы

Я попробовал следующее, и это сработало. Это просто, надеюсь, я смог помочь вам.

#!/bin/bash
for i in /tmp/demo.txt /etc/demo.xt /var/demo.txt /var/log/demo.txt /opt/demo.txt /demo.txt
do
touch $i
if [ -f $i ];
then
rm $i
echo "ФС в порядке! $i"
else
message="ФС только для чтения!"
echo '${message} $i' 
fi
done

Вывод скрипта.

ФС только для чтения! /tmp/demo.txt
ФС в порядке! /etc/demo.xt
ФС в порядке! /var/demo.txt
ФС в порядке! /var/log/demo.txt
ФС в порядке! /opt/demo.txt
ФС в порядке! /demo.txt

Да, вы можете проверить статус возврата монтирования. Проблема в том, что если файловая система уже смонтирована и вы пытаетесь смонтировать ее снова, команда mount вернет ошибку 32. Строго говоря, монтирование не удалось, потому что она уже смонтирована. Чтобы обойти это, например, для однострочного задания резервного копирования для корневого cron, я бы сделал следующее:

mount /myfilesystem 2>/dev/null; grep -qs '/myfilesystem ' /proc/mounts && backupscript && umount /myfilesystem

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

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

Ответ или решение

Для проверки, смонтирована ли файловая система, можно использовать несколько подходов в скрипте на Bash. Вот один из вариантов, который включает использование команды grep, mountpoint, а также проверку кода возврата команды mount.

1. Проверка с помощью grep в /proc/mounts

#!/bin/bash
MOUNT_POINT="/myfilesystem"

if grep -qs " $MOUNT_POINT " /proc/mounts; then
    echo "Файловая система $MOUNT_POINT смонтирована."
else
    echo "Файловая система $MOUNT_POINT не смонтирована."
    mount "$MOUNT_POINT"

    if [ $? -eq 0 ]; then
        echo "Файловая система успешно смонтирована!"
    else
        echo "Что-то пошло не так при монтировании."
    fi
fi

2. Использование mountpoint

Если у вас есть доступ к утилите mountpoint, вы можете сделать это более просто:

#!/bin/bash
MOUNT_POINT="/myfilesystem"

if mountpoint -q "$MOUNT_POINT"; then
    echo "$MOUNT_POINT - это точка монтирования."
else
    echo "$MOUNT_POINT - это не точка монтирования."
fi

3. Проверка статуса возврата при монтировании

Можно также проверить код возврата после выполнения команды mount для обработки ошибки:

#!/bin/bash
MOUNT_POINT="/myfilesystem"

mount "$MOUNT_POINT" 2>/dev/null
if [ $? -eq 0 ]; then
    echo "Файловая система $MOUNT_POINT успешно смонтирована."
else
    echo "Файловая система $MOUNT_POINT уже смонтирована или произошла другая ошибка."
fi

4. Альтернативный способ с использованием findmnt

С помощью команды findmnt вы можете проверить, смонтирована ли файловая система:

#!/bin/bash
MOUNT_POINT="/myfilesystem"

if findmnt "$MOUNT_POINT" >/dev/null 2>&1; then
    echo "$MOUNT_POINT - это точка монтирования."
else
    echo "$MOUNT_POINT - это не точка монтирования."
    mount "$MOUNT_POINT"
fi

5. Использование df

Вы также можете использовать команду df для проверки, смонтирована ли файловая система:

#!/bin/bash
MOUNT_POINT="/myfilesystem"

if df | grep -q "$MOUNT_POINT"; then
    echo "$MOUNT_POINT смонтирована."
else
    echo "$MOUNT_POINT не смонтирована."
    mount "$MOUNT_POINT"
fi

Резюме

Существует множество способов проверки, смонтирована ли файловая система. Выбор метода зависит от ваших предпочтений и доступности команд в вашей среде. Удостоверьтесь, что у вас есть необходимые права для выполнения команды mount.

Оцените материал
Добавить комментарий

Капча загружается...