LINUX.ORG.RU

Как смонтировать в другой каталог уже смонтированный root?


0

0

Корень смонтирован в ro.

Попытка примонтировать его на другой каталог в rw, чтобы внести небольшие правки обламывается:

# mount /dev/sda2 root-rw 
mount: /dev/sda2 уже примонтирован или root-rw занят
mount: согласно mtab, /dev/sda2 примонтирован на /

Это как-то лечится без рестарта и загрузки с livecd? :)

★★★★★

Ответ на: комментарий от sin_a

После этого (если сработает) в r/o обратно не получится перемонтировать без перезагрузки. Хотя, если иного метода правки не получится найти, то придётся так попробовать :)

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

KRoN73 wrote:

После этого (если сработает) в r/o обратно не получится перемонтировать без перезагрузки.

Можно попытаться перемонтировать в ro с помощью SysRq+u.

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

Если в fstab вписано ro (а что происходит а обсуждаемом случае - не знаю), то достаточно просто mount -o remount /path, возвращается к исходному состоянию. Хотя если busy помешает то может не пройти.

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

Ради смеха написал скрипт, определяющий, какие процессы пишут в корень:

bash$ cat who_writes_fs.sh
#!/bin/sh

root=$1
[ -z «$root» ] && root=/

dev=`stat -c «%D» «$root»`

find /proc/*/fd/ -type l 2>/dev/null | while read i; do
stat -c «%A» «$i» | grep -q «w» || continue;

r=`readlink -f «$i» 2>/dev/null`
[ -z «$r» ] && continue;
[ «`stat -c »%D" «$r» 2>/dev/null`" == «$dev» ] && echo «$i -> $r»
done

У меня это оказался smbd (2 шт).

После его остановки отлично перемонтировался в ro.

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

Что-то оно не пашет :)

# ./who_writes_fs.sh
stat: невозможно выполнить stat для `/proc/25238/fd/0': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25238/fd/1': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25238/fd/2': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25238/fd/3': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25238/fd/4': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25238/fd/7': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/25239/fd/4': Нет такого файла или каталога
/proc/6550/fd/16 -> /session_mm_apache2handler0.sem
/proc/6554/fd/16 -> /session_mm_apache2handler0.sem
/proc/6555/fd/16 -> /session_mm_apache2handler0.sem
/proc/6556/fd/16 -> /session_mm_apache2handler0.sem
/proc/6557/fd/16 -> /session_mm_apache2handler0.sem
/proc/6558/fd/16 -> /session_mm_apache2handler0.sem
/proc/6559/fd/16 -> /session_mm_apache2handler0.sem
/proc/6560/fd/16 -> /session_mm_apache2handler0.sem
/proc/6561/fd/16 -> /session_mm_apache2handler0.sem
/proc/6562/fd/16 -> /session_mm_apache2handler0.sem
/proc/6563/fd/16 -> /session_mm_apache2handler0.sem
stat: невозможно выполнить stat для `/proc/6789/fd/21': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/6791/fd/18': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/6793/fd/17': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/6795/fd/18': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/6795/fd/19': Нет такого файла или каталога
/proc/6797/fd/16 -> /session_mm_apache2handler0.sem
/proc/6804/fd/16 -> /session_mm_apache2handler0.sem
/proc/6805/fd/16 -> /session_mm_apache2handler0.sem
/proc/6813/fd/16 -> /session_mm_apache2handler0.sem
/proc/6814/fd/16 -> /session_mm_apache2handler0.sem
/proc/6815/fd/16 -> /session_mm_apache2handler0.sem
/proc/6816/fd/16 -> /session_mm_apache2handler0.sem
/proc/6844/fd/16 -> /session_mm_apache2handler0.sem
/proc/6845/fd/16 -> /session_mm_apache2handler0.sem
/proc/6847/fd/16 -> /session_mm_apache2handler0.sem
/proc/6848/fd/16 -> /session_mm_apache2handler0.sem
/proc/6849/fd/16 -> /session_mm_apache2handler0.sem
/proc/6850/fd/16 -> /session_mm_apache2handler0.sem
/proc/6851/fd/16 -> /session_mm_apache2handler0.sem
/proc/6852/fd/16 -> /session_mm_apache2handler0.sem
stat: невозможно выполнить stat для `/proc/self/fd/3': Нет такого файла или каталога
stat: невозможно выполнить stat для `/proc/self/fd/4': Нет такого файла или каталога
KRoN73 ★★★★★
() автор топика
Ответ на: комментарий от nnz

Эх, если бы я не поскупился в своё время на производительность и LVM2 поставил бы на сервере... :)

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

Всё правильно отработало. Только написано на коленке, вот и мусорит сообщениями об ошибках.

/proc/6850/fd/16 -> /session_mm_apache2handler0.sem


Процесс за нумером 6850 держит файл /session_mm_apache2handler0.sem

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

Понял :)

Спасибо, попробую попозже поиграть с монтированием при отрубленном Апаче.

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

Для истории: улучшенный скрипт.

#!/bin/sh

root=$1
[ -z "$root" ] && root=/

# get target FS device ID (see man 1 stat)
dev=`stat -c "%D" "$root"`

function fds_of_process {
        # from all fds
        find "/proc/$1/fd/" -type l 2>/dev/null |\
        while read i; do
                # select opened for writing
                stat -c "%A" "$i" 2>/dev/null | grep -q "w"  || continue;

                # get real files (not pipes etc.)
                r=`readlink -f "$i" 2>/dev/null`
                [ -z "$r" ] && continue;

                # print files with device ID == root's device ID
                [ "`stat -c "%D" "$r" 2>/dev/null`" == "$dev" ] && echo -e "$1\t$r"
        done
}

echo -e "PID\tFILE"

ps -e --no-heading --format "%p" | while read j; do
        fds_of_process $j
done
lodin ★★★★
()
Ответ на: комментарий от KRoN73

Странно, а у меня прокатило... Может, в удалённый файл кто-то пишет?

Скрипт пропускает удалённые файлы.

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

>Может, в удалённый файл кто-то пишет?

Да, вроде, совсем недавно перезапускал машину. И на автомате ничего не удаляется, вроде...

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

Гы. mysql в /tmp держит удалённые файлы. Интерресное кино! :D

..

Всё, перемонтировалось. Спасибо!

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

Ура!

Только я б убрал бы /tmp с ридонлевой ФС. Мало ли...

У меня как-то было /tmp->/var/tmp

По FHS это не очень хорошо, зато в корень ничего не писалось.

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

>Только я б убрал бы /tmp с ридонлевой ФС. Мало ли...

У меня /tmp в tmpfs был. А тут, когда недавно восстанавливал упавшую корневую систему, снёс fstab, а восстановил его не в полном объёме, про /tmp забыл :) Сейчас исправил...

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

Увы нет :(

Note that the filesystem mount options will remain the same as those on the original mount point, and cannot be changed  by  passing  the  -o option along with --bind/--rbind.

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