Форум программистов, компьютерный форум, киберфорум
Наши страницы

Novell SUSE Linux, Open SUSE

Войти
Регистрация
Восстановить пароль
 
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
#1

Umount + Umount -l - SUSE Linux

05.04.2018, 14:59. Просмотров 182. Ответов 10
Метки нет (Все метки)

OpenSuse 13.1: Случайно обнаружил в "уже моем" коде такую странную последовательность команд: сначала выполняется sudo umount, а потом еще и sudo umount -l (lazy umount)... Есть подозрение, что одна из команд возвращает мне код 32 / EAGAIN (пока до вывода более осмысленных логов не добрался, но предполагаю, что все-таки вторая)... В этом есть некий сакральный смысл, или достаточно одной из команд для того, чтобы отмонтировать раздел?

еще и коммент в коде доставляет:
// we meet strange condition : umount failed, and several diffent locations was mount to single /tmp/db.. path
// so try several iterations now we dont check return code, maybe later
И код возврата не анализируется, но операция считается успешной при ненулевом коде возврата, хотя маны пишут об обратном... Или я и маны не понял...

Подскажите, как все-таки корректно работать с данной командой, чтобы организовать ремаунт разделов, играющих роль хранилищ для видеоархива...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2018, 14:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Umount + Umount -l (SUSE Linux):

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...

Umount / или umount /dev/sda1 - RedHat, Fedora Linux
Как отмонтировать файловую систему? Пишут, что надо войти в однопользовательский режим init 3, затем выполнить umount / Когда пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
blz
144 / 96 / 30
Регистрация: 11.08.2016
Сообщений: 571
05.04.2018, 16:09 #2
все же непонятно, чего нужно добиться.

судя по приведенному коду, сначала просто делали umount но потом возникли случаи что этого недостаточно (или же нельзя отмонтировать потому как есть открытые файлы или сабмаунты или хз еще что) и влепили с -l, откладывая проблему на потом. насколько это соответствует ситуации и поставленным задачам, сказать трудно.

Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
организовать ремаунт
ну ремаунт это mount -o remount, отмонтировать зачем именно надо?
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
05.04.2018, 17:13  [ТС] #3
blz, да если бы я знал, или хотя бы мог спросить у автора, я бы не спрашивал на форуме у знатоков линукса... но по сути, две команды подряд делать не нужно, если я правильно понял?
0
blz
144 / 96 / 30
Регистрация: 11.08.2016
Сообщений: 571
05.04.2018, 17:36 #4
it depends отмонтировать нельзя просто так если есть в частности открытые файлы.

Note that a file system cannot be unmounted when it is 'busy' - for
example, when there are open files on it, or when some process has its
working directory there, or when a swap file on it is in use. The
offending process could even be umount itself - it opens libc, and libc
in its turn may open for example locale files. A lazy unmount avoids
this problem.


но что за скрипт и какие он задачи выполняет, непонятно. допускаю, что в рамках задачи есть резон в том, чтобы если не отмонтировалось «просто так», делать -l или даже -f (force). о5 таки возможно, что скриптописатель полагался на то, что umount и затем umount -l сработает в любом случае (и это таки верно для большинства ситуаций), поэтому код возврата и не проверяется. остальные догадки будут чересчур сферическими если не дадите moar конкретики.
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
06.04.2018, 07:57  [ТС] #5
blz, конкретики, к сожалению, не будет, ибо автор ответил просто: "5 лет прошло, не помню я"... следовательно, проведу жесткий рефакторинг кода согласно последнего мануала umount... Кстати, а нужно ли перемонтировать разделы, так сказать, в профилактических целях или можно как-то проверить статус монтирования, если так можно его назвать? Может по каким-то неведомым причинам в системе точка монтирования значится, а физически все поломалось и надо попытаться подключить раздел снова.
0
blz
144 / 96 / 30
Регистрация: 11.08.2016
Сообщений: 571
06.04.2018, 11:27 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
конкретики, к сожалению, не будет
а что вообще за задача скриптом выполняется? монтирование локального/сетевого диска? цель отмонтирования/перемонтирования?

мне видится примерно такая логика – если umount завершился не с 0, то надо проверить открытые файлы/убить соотв. процессы. lazy umount (-l) это скорее для медленных сетевых маунтов когда лень ждать. тут функция по теме, поди понятно будет, ненужное выкинете:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# $1 - action, $n - parameters                                                                               
open_files_action() {                                                                                        
    debug_print_func " $@"                                                                                   
                                                                                                             
    local mnt="$(PRM mount)" tmp=                                                                            
    case "$1" in                                                                                             
        check)                                                                                               
            if [[ $(PRM ofh) == 'fuser' ]]; then                                                             
                tmp="$(fuser -m "$mnt" -v 2>&1)" || return 1                                                 
                tmp="$(echo -e "$tmp" | grep -Ev 'kernel.*mount' | grep -Eo '[^ ].*')"                       
            else                                                                                             
                tmp="$(lsof -w -X +D $mnt)"                                                                  
                echo -e "$tmp" | grep -Eq 'COMMAND.*PID.*USER' || return 1                                   
            fi                                                                                               
            (( $(echo -e "$tmp" | wc -l)>1 )) || return 1                                                    
            echo -e "$tmp"                                                                                   
            return 0                                                                                         
            ;;                                                                                               
                                                                                                             
        kill) # $2 - signal                                                                                  
            if [[ $(PRM ofh) == 'fuser' ]]; then                                                             
                fuser -m "$mnt" -k -${2}                                                                     
            else                                                                                             
                local tmp=$(lsof -t -w -X +D "$mnt")                                                         
                [[ -n "$tmp" ]] && kill -s ${2} $tmp                                                         
            fi                                                                                               
            ;;                                                                                               
    esac                                                                                                     
}
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
нужно ли перемонтировать разделы в профилактических целях
да ну, нет конечно

Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
проверить статус монтирования … физически все поломалось
проверить, смонтировано или нет, грубо – cat /proc/mounts | grep $mountpoint
далее проверить рабочий ли mount – грубо и просто ls -l $mountpoint || error (прочитать корень маунта)

физически поломалось – ну как-то снова чересчур общо. если это например сервер и сдыхает диск, то надо анализировать ситуацию и делать все вручную – закрывать программы, отмонтировать, отрубать/переинициализировать диск, делать штатную для FS проверку… потом в обратном порядке. и это может быть непросто и очень небыстро.
1
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
06.04.2018, 13:25  [ТС] #7
blz, задача простая: обеспечить максимально надежный доступ к хранилищам с видеоархивом... Хранилища могут быть как локальные, так и сетевые (iSCSI)... Из кода этого менеджера архива стало ясно только одно, что возникала ситуация, когда при некорректном Umount в папку пытались монтировать сразу несколько хранилищ... Поэтому проводилось отмонтирование без параметров, причем 3 раза, а потом еще и с ключом -l, снова-таки 3 раза... При этом обещали код не анализировать, но его анализировали, причем некорректным считался код возврата - 0!!! Может в какой-то древней редакции этой утилиты было так, что 0 является некорректным завершением, в чем я сомневаюсь почему-то...
0
blz
144 / 96 / 30
Регистрация: 11.08.2016
Сообщений: 571
06.04.2018, 13:44 #8
Lord_Voodoo, с практической точки зрения практикующего сисадмина все это, простите, звучит немного нелогично и местами – совсем непонятно.
Для начала – неясно, как монтирование/перемонтирование обеспечивает надежность доступа. И зачем вообще скриптами это делается (какая-то динамическая конфигурация?)

По поводу кода возврата. Возможно логика такая: umount $mnt || umount -l $mnt (если не вышло отмонтировать просто так, то делаем lazy umount). Чтобы с минимальными мозговыми усилиями обеспечить максимальную правильность отмонтирования. Хотя с учетом того, что на этот момент какой-то процесс может иметь там открытые файлы, это выглядит снова неправильным. Нет, код возврата != 0 никогда не означал успеха отмонтирования.

Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
пытались монтировать сразу несколько хранилищ
ну это вообще что-то ужасное и непостижимое
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
06.04.2018, 14:00  [ТС] #9
blz, я уже столько нарыл там нелогичного, что даже и не знаю, что сказать... мне кинули проект - наслаждайся... при этом узнать, что зачем и почему - спросить не у кого (см. пост выше со словами автора), поэтому пытаюсь привести в чувства имеющийся код... если когда-то постигну ход мыслей предыдущих творцов, обязательно поделюсь с миром))) вы мне прояснили главное: успешный код возврата - 0... значит у меня в коде просто очередная очепятка...

Про дива в монтировании - я тоже выкидывал коммент из кода - не я придумал, там так написано)))
0
blz
144 / 96 / 30
Регистрация: 11.08.2016
Сообщений: 571
06.04.2018, 14:10 #10
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
мне кинули проект - наслаждайся
возможно, тут будет в итоге проще осмыслить цели проекта, переформулировать их и сделать все проще и правильнее. судя по всему те, кто это делали, были не особо компетентны и, как следствие, могли реализовывать полуграмотно поставленную задачу не на тех уровнях и совершенно не теми средствами.
0
Lord_Voodoo
Супер-модератор
8607 / 2228 / 61
Регистрация: 07.03.2007
Сообщений: 10,801
Завершенные тесты: 1
08.04.2018, 08:55  [ТС] #11
blz, к этому все и идет, пока собираю информацию по предметной области задачи...
0
08.04.2018, 08:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru