Summary: | sysvinit/reboot не работает с отдельным /usr после обновления p10 -> p11 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Sergey Y. Afonin <asy> | ||||||||
Component: | startup | Assignee: | Alexey Gladkov <legion> | ||||||||
Status: | NEW --- | QA Contact: | qa-sisyphus | ||||||||
Severity: | critical | ||||||||||
Priority: | P5 | CC: | arseny, cas, glebfm, ldv, legion, legion, placeholder | ||||||||
Version: | unstable | ||||||||||
Hardware: | x86_64 | ||||||||||
OS: | Linux | ||||||||||
Attachments: |
|
Description
Sergey Y. Afonin
2024-08-22 08:32:12 MSK
Created attachment 16672 [details]
Картинка с финальными сообщениями
Картинка с финальными сообщениями
Filesystem Size Used Avail Use% Mounted on runfs 990M 2,1M 988M 1% /run shmfs 990M 0 990M 0% /dev/shm tmpfs 990M 4,0K 990M 1% /tmp udevfs 5,0M 0 5,0M 0% /dev /dev/sda2 989M 76M 846M 9% /boot /dev/sda5 7,8G 26M 7,4G 1% / /dev/sda6 29G 4,6G 23G 17% /usr /dev/sda7 29G 2,0G 26G 8% /var /dev/sda8 36G 76M 34G 1% /home (In reply to Sergey Y. Afonin from comment #0) > Может быть, на самом деле, надо на sysvinit вешать: > > # rpm -qf /sbin/reboot > sysvinit-3.00-alt2.i586 А действительно, почему "Unmounting filesystem [/usr]"? Надо remount в ro наверное? И, даже, startup: # rpm -qf /etc/rc.d/init.d/halt startup-0.9.9.16-alt1.noarch Такой вот хак помогает: --- halt.bak 2022-11-22 21:23:42.000000000 +0400 +++ halt 2024-08-22 12:02:37.874568993 +0400 @@ -159,10 +159,10 @@ 'Unmounting loopback filesystem (retry)' # Unmount all the rest. -UnmountFilesystems 3 5 \ - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ - 'Unmounting filesystem' \ - 'Unmounting filesystem (retry)' +#UnmountFilesystems 3 5 \ +# '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ +# 'Unmounting filesystem' \ +# 'Unmounting filesystem (retry)' # Turn off encrypted block devices cryptdisks_exe=/etc/rc.d/scripts/cryptdisks Но надо, наверное, как-то аккуратнее сделать. (In reply to Sergey Y. Afonin from comment #4) > И, даже, startup: > > # rpm -qf /etc/rc.d/init.d/halt > startup-0.9.9.16-alt1.noarch Хотя в p10 startup тот же самый. Вопрос тогда открытый, что на это повлияло. Что-то я сразу внимания не обратил. В p10 sysvinit 2.88 c /sbin/reboot, а в p11 sysvinit 3.00 c /usr/sbin/reboot, так что понятно, почему раньше работало со startup 0.9.9.16. Кого, в итоге, считать виновным? systemd для себя давно решил эту проблему, они исполняют программу systemd-shutdown. man systemd-shutdown(8): PID 1 is replaced by the /usr/lib/systemd/systemd-shutdown tool which is then responsible for the actual shutdown. Before shutting down, this binary will try to unmount all remaining file systems (or at least remount them read-only), disable all remaining swap devices, detach all remaining storage devices and kill all remaining processes. (In reply to Sergey Y. Afonin from comment #6) > Что-то я сразу внимания не обратил. В p10 sysvinit 2.88 c /sbin/reboot, а в > p11 sysvinit 3.00 c /usr/sbin/reboot, так что понятно, почему раньше > работало со startup 0.9.9.16. > > Кого, в итоге, считать виновным? Судя по всему, надо в p11 в startup считать /usr неотключаемым вдобавок к / (вместо их размонтирования переводить в ro — этого же достаточно для корректного завершения работы?). Я не очень хорошо представляю себе код startup, но вряд ли они там используют при выключении код, запущенный с момента загрузки. Это аналогично поведению initrd при старте (/usr считается необходимым для pivot root) Наверное вот так как-то: --- halt.bak 2022-11-22 21:23:42.000000000 +0400 +++ halt 2024-08-29 10:05:26.043098571 +0400 @@ -160,7 +160,7 @@ # Unmount all the rest. UnmountFilesystems 3 5 \ - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ + '$2 != "/" && $2 !~ /^\/(dev|proc|sys|usr)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ 'Unmounting filesystem' \ 'Unmounting filesystem (retry)' @@ -189,6 +189,9 @@ action 'Remounting remaining filesystems (if any) read-only:' \ umount -afnr -t noproc,nosysfs,notmpfs,nodevfs,nodevtmpfs,nousbfs,norpc_pipefs,nonfsd action 'Remounting root filesystem read-only:' mount -n -o remount,ro / +if [ -n "`mount | grep " /usr "`" ]; then + action 'Remounting /usr filesystem read-only:' mount -n -o remount,ro /usr +fi # See if this is a powerfail situation. UPSCTL=/etc/apcupsd/apccontrol (In reply to Sergey Y. Afonin from comment #9) > Наверное вот так как-то: Ну так что? Или NMU делать? (In reply to Sergey Y. Afonin from comment #10) > (In reply to Sergey Y. Afonin from comment #9) > > > Наверное вот так как-то: > > Ну так что? Или NMU делать? Надо скоординироваться с https://git.altlinux.org/tasks/356953 в любом случае. (In reply to Sergey Y. Afonin from comment #9) > Наверное вот так как-то: > > --- halt.bak 2022-11-22 21:23:42.000000000 +0400 > +++ halt 2024-08-29 10:05:26.043098571 +0400 1) Лучше проводить развёртку в обратном порядке: `/usr` стартует после `/`, останавливается перед `/`. 2) Есть же программа mountpoint, зачем городить `test -n "$(mount | grep ' /usr ')"`. @@ -189,6 +189,9 @@ action 'Remounting remaining filesystems (if any) read-only:' \ umount -afnr -t noproc,nosysfs,notmpfs,nodevfs,nodevtmpfs,nousbfs,norpc_pipefs,nonfsd +if mountpoint -q /usr; then + action 'Remounting /usr filesystem read-only:' mount -n -o remount,ro /usr +fi action 'Remounting root filesystem read-only:' mount -n -o remount,ro / # See if this is a powerfail situation. UPSCTL=/etc/apcupsd/apccontrol Я, конечно, не мейнтейнер startup. Created attachment 16806 [details]
A proposed fix
Created attachment 16807 [details]
A proposed fix v2
Забыл Suggested-by; /usr в теории может быть среди особых классов точек монтирования (autofs и loop devices)
(In reply to Arseny Maslennikov from comment #12) > 2) Есть же программа mountpoint, зачем городить `test -n "$(mount | grep ' > /usr ')"`. $ rpm -qf /bin/mountpoint sysvinit-utils-2.88-alt5 Если в системе без sysvinit это точно не нужно, то можно и mountpoint использовать. Какое будет чьё-нибудь волевое решение? :-) И, наверное, баг critical для хостов на необслуживаемых площадках. А то и bloker. Это про "sync && reboot -f" надо не забыть... (In reply to Arseny Maslennikov from comment #14) > Created attachment 16807 [details] > A proposed fix v2 Кто приложит и обновит? Или я NMU отправлю с этим вот вариантом. Скажем, в среду. https://git.altlinux.org/tasks/360974 кто заапрувит? (In reply to Sergey Y. Afonin from comment #18) > https://git.altlinux.org/tasks/360974 > > кто заапрувит? Неделя прошла... Наверное, новые выражения на awk выполняют свою работу, но у меня рука не поднимается такое аппрувить: - '$2 != "/" && (($3 == "supermount") || ($3 == "autofs") || ($3 == "autofs4")) {print $2}' \ + '$2 != "/" && $2 != "/usr" && ($3 ~ "^(supermount|autofs[0-9]*)$") {print $2}' \ - '$2 != "/" && $1 ~ /^\/dev\/loop/ {print $2}' \ + '$2 != "/" && $2 != "/usr" && $1 ~ /^\/dev\/loop/ {print $2}' \ - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ + '$2 != "/" && $2 != "/usr" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ {print $2}' \ (In reply to Dmitry V. Levin from comment #20) > Наверное, новые выражения на awk выполняют свою работу, но у меня рука не > поднимается такое аппрувить: > > - '$2 != "/" && (($3 == "supermount") || ($3 == "autofs") || ($3 == > "autofs4")) {print $2}' \ > + '$2 != "/" && $2 != "/usr" && ($3 ~ "^(supermount|autofs[0-9]*)$") > {print $2}' \ > > - '$2 != "/" && $1 ~ /^\/dev\/loop/ {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $1 ~ /^\/dev\/loop/ {print $2}' \ > > - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ > {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && > $1 !~ /^none$/ {print $2}' \ У Сергея было по-другому (comment 9), но в том варианте было написано, что, выключаясь, следует не стопить не только сам /usr, но и все точки монтирования под ним, если таковые имеются. Либо это помешает потом сделать `mount -o remount,ro /usr`, либо не помешает, но тогда это просто неряшливо. (In reply to Dmitry V. Levin from comment #20) > Наверное, новые выражения на awk выполняют свою работу, но у меня рука не > поднимается такое аппрувить: > > - '$2 != "/" && (($3 == "supermount") || ($3 == "autofs") || ($3 == > "autofs4")) {print $2}' \ > + '$2 != "/" && $2 != "/usr" && ($3 ~ "^(supermount|autofs[0-9]*)$") > {print $2}' \ > > - '$2 != "/" && $1 ~ /^\/dev\/loop/ {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $1 ~ /^\/dev\/loop/ {print $2}' \ > > - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ > {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && > $1 !~ /^none$/ {print $2}' \ Если нужный awk позволяет вместо двух сравнений с "/" и "/usr" написать `!~ /\/(usr)?/`, то, наверное, это тоже допустимый вариант. (In reply to Dmitry V. Levin from comment #20) > Наверное, новые выражения на awk выполняют свою работу, но у меня рука не > поднимается такое аппрувить: > > - '$2 != "/" && (($3 == "supermount") || ($3 == "autofs") || ($3 == > "autofs4")) {print $2}' \ > + '$2 != "/" && $2 != "/usr" && ($3 ~ "^(supermount|autofs[0-9]*)$") > {print $2}' \ > > - '$2 != "/" && $1 ~ /^\/dev\/loop/ {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $1 ~ /^\/dev\/loop/ {print $2}' \ > > - '$2 != "/" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && $1 !~ /^none$/ > {print $2}' \ > + '$2 != "/" && $2 != "/usr" && $2 !~ /^\/(dev|proc|sys)(\/.*)?$/ && > $1 !~ /^none$/ {print $2}' \ А чем отличаются эти строки, кроме добавления && $2 != "/usr" ? Ну и, на самом деле, надо уже что-то сделать, а то зависание по команде reboot - это явная проблема, не имеющая отношения к перфекционизму. (In reply to Dmitry V. Levin from comment #20) > Наверное, новые выражения на awk выполняют свою работу, но у меня рука не > поднимается такое аппрувить: Ау. Напишите так, чтобы рука поднялась. (In reply to Sergey Y. Afonin from comment #23) > то зависание по команде reboot - это явная проблема Надо что, на десятке-другом компьютеров систему переустанавливать, чтобы от /usr избавиться? |