LINUX.ORG.RU

нужен скрипт на автомонтирование


0

1

нужен скрипт:
автозапуск при загрузке
проверка наличия папки /sys/bus/pci/drivers/HDA Intel через 3-5 сек
затем mount -a
потом если взможно проверка на *, то есть заполнение /media/RAID_capture/* к примеру
если есть, то выход
если нет, то повтор mount -a

у меня на сусе звук грузится 10-40 сек

#!/bin/bash
sleep 5
if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
mount -a
fi
if [ -d /media/RAID_capture/* ]; then
exit 0
else
mount -a
fi
tn1
()
Ответ на: комментарий от tn1

sleep 5
if [ -d «/sys/bus/pci/drivers/HDA Intel» ]; then
mount -a
эта папка может появиться и через30 сек
надо проверять каждые 5 сек пока не придёт успех

return12
() автор топика
Ответ на: комментарий от tn1

понял, и два момента

/media/RAID_capture/*
/media/RAID_video_audio/*
/media/RAID_archiv/*
надо тестировать три- лучше сразу
и скрипт поместить в автозагрузку?

return12
() автор топика
Ответ на: комментарий от return12

Проверять «пустоту» директории лучше через ls.

#!/bin/bash
while true; do
sleep 5
if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
mount -a
break
fi
done
if [ "`ls /media/RAID_capture/`" ] && [ "`ls /media/RAID_video_audio/`" ] && [ "`/media/RAID_archiv/`" ]; then
exit 0
else
mount -a
fi
tn1
()
Ответ на: комментарий от return12

> вопрос: я сделал автозапуск

поместил его в /usr/local/sbin

может надо в домашнюю?


Запускается от администратора? лучше в /root, в /home на сервере ничего исполняемого быть не должно. А как ты его запускаешь?

tn1
()
Ответ на: комментарий от tn1
while true; do
  sleep 3
  if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
    break
  fi
done

while true; do
  if [ -d /media/RAID_capture/* ] && [ -d /media/RAID_video_audio/* ] && [ -d /media/RAID_archiv/* ]; then
     exit 0
     else
     mount -a
     sleep 5
  fi
done

твой ваиант не работал
испытаю этот

return12
() автор топика
Ответ на: комментарий от tn1

у тебя не монтировал и консоль висла
у меня монтирует
но в консоли ошибка
usr/local/sbin/mount: line 12: [: too many arguments
USR / местные / sbin / монтирования: строка 12: [: слишком много аргументов

return12
() автор топика
Ответ на: комментарий от return12
#!/bin/bash
while true; do
sleep 3
if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
break
fi
done
while true; do
if [ "`ls /media/RAID_capture/`" ] && [ "`ls /media/RAID_video_audio/`" ] && [ "`ls /media/RAID_archiv/`" ]; then
exit 0
else
mount -a
sleep 5
fi
done

проблем здесь нет

return12
() автор топика
Ответ на: комментарий от tn1

огромное спасибо
основные знания в этом скрипте безусловно у тебя

А как ты его запускаешь? в suse есть
меню
параметры
запуск
автозапуск
скрипты
путь к скрипту
всё

return12
() автор топика
Ответ на: комментарий от return12

>эта папка может появиться и через30 сек надо проверять каждые 5 сек пока не придёт успех

Чиво? Этот каталог появляется после завершения udevadm settle. Не надо его поллить периодически, надо просто запустить этот скрипт после скрипта, запускающего udevadm settle.

потом если взможно проверка на *, то есть заполнение /media/RAID_capture/* к примеру

Если надо проверить, смонтировалось ли, открой для себя команду mountpoint.

gentoo_root ★★★★★
()
Ответ на: комментарий от tn1

в даемонах ничего не знаю, предлолагаю что поддерживают процесс
я вообще пока мало знаю поэтому и прошу

return12
() автор топика
Ответ на: комментарий от return12

а синтаксиc какой?

Открой для себя команду man с параметром mountpoint. Как-то так:

if mountpoint -q /media/RAID_capture; then
    echo "Mounted"
else
    echo "Unmounted"
fi

gentoo_root ★★★★★
()
Ответ на: комментарий от return12

а так работает?

if mountpoint -q /media/*; then

Ясно, ман так и не читал. Там же белым по чёрному написано, что параметр директории один. Если в /media больше одного файла, то получится уже несколько параметров, так не сработает. Да и логику включить можно — если /media/1 смонтирован, а /media/2 не смонтирован — какой результат должна вернуть команда?

Тут надо использовать цикл, чтобы, например, проверить, что все смонтированы:

RES=1
for mp in /media/*; do
    [ -d "$mp" ] || continue
    if ! mountpoint "$mp"; then
         RES=0
         break
    fi
done
[ "$RES" = 1 ] && echo "All mounted" || echo "All unmounted"

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root
if mountpoint -q /media/RAID_capture && mountpoint -q /media/RAID_video_audio && mountpoint -q /media/RAID_archiv; then
    echo "Mounted"
else
    echo "Unmounted"
fi

вот так

#!/bin/bash
while true; do
sleep 3
if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
  break
fi
done
while true; do
if mountpoint -q /media/RAID_capture && mountpoint -q /media/RAID_video_audio && mountpoint -q /media/RAID_archiv; then
  echo "Mounted"
  exit 0
else
  echo "Unmounted"
  mount -a
  sleep 5
fi
done
return12
() автор топика
Ответ на: комментарий от gentoo_root
RES=1
for mp in /media/*; do
    [ -d "$mp" ] || continue
    if ! mountpoint "$mp"; then
         RES=0
         break
    fi
done
[ "$RES" = 1 ] && echo "All mounted" || echo "All unmounted"

ну проверка, а как монтировать?

return12
() автор топика
Ответ на: комментарий от return12

while true; do

sleep 3

Это же костыль — периодическая проверка, пока появится каталог. В одном из init-скриптов выполняется команда udevadm settle. После неё нужный каталог точно появится. Надо просто найти тот скрипт и запускать свой после него.

Или же в начало своего скрипта поместить команду ‘udevadm settle --exit-if-exists=«/sys/bus/pci/drivers/HDA Intel»’ — так даже лучше.

а как монтировать?

mount'ом, не?

Что-то такое получится (имена каталогов в /media, оказывается, известны же, а не /media/*, правильно я понял из твоего скрипта?):

#!/bin/sh
udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
mountpoint -q /media/RAID_capture && mountpoint -q /media/RAID_video_audio && mountpoint -q /media/RAID_archiv || mount -a
Или так:
#!/bin/sh
udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
for mp in /media/RAID_{capture,video_audio,archiv}; do
    [ -d "$mp" ] || continue
    mountpoint "$mp" || mount "$mp"
done

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root
linux-avdz:~ # udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
linux-avdz:~ # for mp in /media/RAID_{capture,video_audio,archiv}; do
>     [ -d "$mp" ] || continue
>     mountpoint "$mp" || mount "$mp"
> done
/media/RAID_capture is a mountpoint
/media/RAID_video_audio is a mountpoint
/media/RAID_archiv is a mountpoint
linux-avdz:~ #

этот самый лучший
return12
() автор топика
Ответ на: комментарий от gentoo_root

невероятно, но факт

процент удачного монтирования
[ «`ls /media/RAID_capture/`» ] && [ «`ls /media/RAID_video_audio/`» ] && [ «`ls /media/RAID_archiv/`» ] 95,а

mountpoint «$mp» || mount «$mp» 80
в чём дело?
без скрипта было 5 процентов

return12
() автор топика
Ответ на: комментарий от return12

>процент удачного монтирования

Щито? Какой процент монтирования? Это кто такую информацию даёт? o_O Или сам считал?

95,а

80

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

Почему я не вижу здесь вывода команды mount при неудачном монтировании? Где строки из /etc/fstab, соответствующие этим точкам монтирования? Я их угадать должен, да?

И почему надо ждать появления именно «/sys/bus/pci/drivers/HDA Intel», а не какого-то другого каталога? Какое отношение имеет загруженный модуль звуковой карты с успешному монтированию рейда? В этом, наверное, и проблема.

gentoo_root ★★★★★
()
Ответ на: комментарий от return12

дополнительная информация в сообщениях по zenity

return12
() автор топика
Ответ на: комментарий от return12

>пришлось удалить и заменить который на ls

Выложите полностью тот скрипт, который работает. ls - не самый лучший вариант, потому что в теории монтируемые ФС могут быть и пустыми.

дополнительная информация в сообщениях по zenity

Я не знаю, где это, поэтому либо выложите сюда, либо дайте ссылку на:

1. вывод команды mount при неудачном монтировании;

2. полностью /etc/fstab.

И хотелось бы получить объяснение, почему выбран каталог «/sys/bus/pci/drivers/HDA Intel» для ожидаемого. Какое отношение имеет звуковая подсистема к монтированию RAID-разделов?

И ещё такой вопрос: не являются ли подкаталоги в /media/ симлинками куда-то? Потому что я написал проверку '[ -d «$mp» ] || continue', а она пройдёт только если точки монтирования - каталоги, а не симлинки. Попробуйте ещё её убрать.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root
#!/bin/bash
while true; do
sleep 3
if [ -d "/sys/bus/pci/drivers/HDA Intel" ]; then
break
fi
done
while true; do
if [ "`ls /media/RAID_capture/`" ] && [ "`ls /media/RAID_video_audio/`" ] && [ "`ls /media/RAID_archiv/`" ]; then
exit 0
else
mount -a
sleep 5
fi
done
return12
() автор топика
Ответ на: комментарий от gentoo_root
/dev/disk/by-id/ata-ST3250820A_5QE31L39-part7 /                         ext4       acl,user_xattr                                            1 1
/dev/disk/by-id/ata-ST3250820A_5QE31L39-part1 /windows/C                ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=ru_RU.UTF-8    0 0
/dev/mapper/sil_agadbhbhcecb_part7            /media/RAID_archiv        ntfs-3g    user,users,gid=users,fmask=111,dmask=0,locale=ru_RU.UTF-8 0 0
/dev/mapper/sil_agadbhbhcecb_part6            /media/RAID_video_audio   ntfs-3g    user,users,gid=users,fmask=111,dmask=0,locale=ru_RU.UTF-8 0 0
/dev/mapper/sil_agadbhbhcecb_part5            /media/RAID_capture       ntfs-3g    user,users,gid=users,fmask=111,dmask=0,locale=ru_RU.UTF-8 0 0
proc                 /proc                proc       defaults            0 0
sysfs                /sys                 sysfs      auto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto              0 0
usbfs                /proc/bus/usb        usbfs      auto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5     0 0
return12
() автор топика
Ответ на: комментарий от return12

Почему вы упорно игнорируете мой вопрос?

gentoo_root

И почему надо ждать появления именно «/sys/bus/pci/drivers/HDA Intel», а не какого-то другого каталога? Какое отношение имеет загруженный модуль звуковой карты с успешному монтированию рейда? В этом, наверное, и проблема.

Тролль? Или просто мои сообщения до конца не читаете?

Но теперь-то всё понятно.

Этот ваш мегакостыльнейший скрипт сначала зачем-то ожидает инициализации звуковой подсистемы, причём неправильным методом поллинга каждые 3 секунды. Потом он МНОГОКРАТНО пытается смонтировать файловые системы, а если не удаётся (проверка на удачность тоже неправильная, потому что ls; раздел может быть и пустым), то повторяет попытку через 5 секунд, что увеличивает время загрузки.

Мой скрипт у вас не работал, потому что:

  • он пытался смонтировать однократно, предполагая, что уже всё для этого готово;
  • он предполагал, что всё готово, когда загрузится звуковая подсистема, потому что вы в ОП так написали.

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

#!/bin/sh
for dev in /dev/mapper/sil_agadbhbhcecb_part{5..7}; do
    udevadm settle --exit-if-exists="$dev"
    mount "$dev"
done
Но мне всё таки интересно, почему вы считали, что надо ждать появления каталога «/sys/bus/pci/drivers/HDA Intel».

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

старый ваш не работает
на ls в 2 раза лучше, но небольше 50 проц
о звуке
звук появляется через 10-40 сек после загрузки кде,что не нормально
при попытке в это время что либо открыть это открыть зависает
о деле
там в сусе много настроек

монтировать по ядру
монтировать по девайсу

не монтировать при загрузке
монтировать при загрузке

монтировать вручную
я галки не куда не ставил
а может надо?, то куда?

return12
() автор топика
Ответ на: комментарий от return12

звук появляется через 10-40 сек после загрузки кде,что не нормально

Так надо просто поднять звук? Зачем тогда было объединять это с монтированием в один скрипт?

В /etc/fstab я вижу, что noauto не установлены, поэтому всё должно монтироваться само уже готовыми скриптами дистрибутива. Также я вижу в конце строк «0 0». Это значит, что проверка ФС не будет производиться при загрузке. Настоятельно рекомендую заменить на «0 2». Возможно, ФС битая, потому что была неправильно отмонтирована и не проверена потом. Если не монтирует само — не надо писать костыли в виде скриптов, надо писать в багтрекер дистрибутива.

По поводу звука:

звук появляется через 10-40 сек после загрузки кде,что не нормально

pulseaudio не используется? Если используется, то он может давать задержку в несколько секунд после запуска DE, это не лечится, он начинает грузиться после запуска DE, а не во время загрузки. Можно, разве что, удалить его.

Скрипт из одной строки, чтобы просто дождаться звука при загрузке (если не в pulseaudio дело):

#!/bin/sh
udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

у меня HDA VIA 8237A
поэтому удалил алса и пулсе и в убунту звук нормальный стал
я раньше и сечас выбрал загружаться по ид а не по метке
в консоль роота пишу mount -a
с 3-5 попыток помогает

return12
() автор топика
Ответ на: комментарий от return12

pulseaudio не используется там одна alsa
правильнее OSS

return12
() автор топика
Ответ на: комментарий от gentoo_root
linux-avdz:~ # udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
linux-avdz:~ # for mp in /media/RAID_{capture,video_audio,archiv}; do
>     [ -d "$mp" ] || continue
>     mountpoint "$mp" || mount "$mp"
> done
/media/RAID_capture is a mountpoint
/media/RAID_video_audio is a mountpoint
/media/RAID_archiv is a mountpoint
linux-avdz:~ # 

если командой моунт то, строк непримонтироанных просто нет

return12
() автор топика
Ответ на: комментарий от return12

/media/RAID_capture is a mountpoint /media/RAID_video_audio is a mountpoint /media/RAID_archiv is a mountpoint

Скрипт как бы намекает, что ничего не смонтировал, потому что оно уже до него было смонтировано.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root
linux-avdz:~ # RES=1
linux-avdz:~ # for mp in /media/*; do
>     [ -d "$mp" ] || continue
>     if ! mountpoint "$mp"; then
>          RES=0
>          break
>     fi
> done
/media/RAID_archiv is not a mountpoint
linux-avdz:~ # [ "$RES" = 1 ] && echo "All mounted" || echo "All unmounted"
All unmounted
linux-avdz:~ # #!/bin/sh
linux-avdz:~ # udevadm settle --exit-if-exists="/sys/bus/pci/drivers/HDA Intel"
linux-avdz:~ # for mp in /media/RAID_{capture,video_audio,archiv}; do
>     [ -d "$mp" ] || continue
>     mountpoint "$mp" || mount "$mp"
> done
/media/RAID_capture is a mountpoint
/media/RAID_video_audio is a mountpoint
/media/RAID_archiv is not a mountpoint
linux-avdz:~ # 

а воз и ныне там

return12
() автор топика
Ответ на: комментарий от return12

>а воз и ныне там

То есть на багтрекер баг ты так и не отправил? Должно само без костылей монтироваться из /etc/fstab, там нет noauto.

/media/RAID_capture is a mountpoint

/media/RAID_video_audio is a mountpoint

/media/RAID_archiv is not a mountpoint

/media/RAID_capture и /media/RAID_video_audio уже были смонтированы. /media/RAID_archiv должен был смонтироваться скриптом.

а воз и ныне там

Хоть бы написал, что реально произошло (что смонтировалось, что нет). Может, mount ошибки выдавал? Может, ошибки в логе?

gentoo_root ★★★★★
()
Ответ на: комментарий от return12

>mountpoint у этой команды что есть код выхода 0

Мой парсер вылетел на этой фразе. Если программа завершилась с нулевым кодом — это успешное завершение.

и ещё чем отличается sleep от wait-объясните

Разные команды. sleep приостанавливает выполнение процесса на заданное время, т.е. ожидает определённое время. wait ожидает завершения дочернего фонового процесса.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Если программа завершилась с нулевым кодом — это успешное завершение
знаю
успешное завершение--не примонтирован
код ошибки-нет каталога
так?

return12
() автор топика
Ответ на: комментарий от gentoo_root

на ваших знаниях сделаю скрипт
смотрите вечером в 20 00
последнее
как писать в скрипте пустой каталог?

return12
() автор топика
Ответ на: комментарий от return12

>сделаю скрипт

Зачем? Для монтирования? Говорю же, тут не скрипты нужны, тут надо разбираться, почему оно само не монтируется.

в 20 00

В каком часовом поясе?

как писать в скрипте пустой каталог?

ОМГ, зачем? Если для проверки монтирования — это не сработает в случае пустого раздела, а в теории такое может быть. А вообще можно парсить выхлоп ‘ls -A’ — он должен быть пустым.

gentoo_root ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.