LINUX.ORG.RU

Проблемы с размещением /root на ZFS-разделе

 ,


0

3

ОС Ubuntu 16.04. У меня корень на ZFS-разделе. Соответственно я создал ряд разделов, которые автоматически монтируются в стандартные места при загрузке, в том числе и /root. Если я из рутовой ssh-сессии выполняю команду systemctl reboot, происходит следующее. Начинается процесс выключения, в том числе отмонтируются все ФС кроме корневой. Но сессия ещё в этот момент не разорвалась, bash ещё работает. Потом bash-у приходит сигнал, он завершает работу и сохраняет историю (/root/.bash_history). Раздел /root уже отмонтирован, поэтому этот файл создаётся по сути в ФС /. При следующей загрузке каталог /root существует и не пуст, поэтому ФС /root туда не монтируется, приходится заходить от другого пользователя, удалять /root/.bash_history и вручную монтировать.

Как бы наиболее правильно решить эту проблему? Т.е. либо прописать zfs-у, чтобы он монтировал игнорируя непустую директорию (кто вообще это придумал?), либо чтобы в процессе выключения bash-и прибивались прежде, чем отмонтируются директории, либо чтобы bash не сохранял историю, если каталога /root нет (он его сам создаёт, если его нет).

Это всё были мои предположения. Собственно факты — после перезагрузки иногда остаётся /root/.bash_history и это не даёт подмонтироваться /root. Баг повторяется не всегда.

★★★★★

Последнее исправление: Legioner (всего исправлений: 2)

Как бы наиболее правильно решить эту проблему?

Не страдать фигнёй, создавая кучу разделов.

Deleted
()

Но сессия ещё в этот момент не разорвалась, bash ещё работает.

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

Как у тебя устроена ssh-сессия? tmux, screen, вот это всё? Как выполняется монтирование /root?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Как у тебя устроена ssh-сессия? tmux, screen, вот это всё?

Просто ssh и в нём bash.

Как выполняется монтирование /root?

Честно говоря не знаю. / на ZFS, как-то само оно монтируется при загрузке. Может initrd-скриптами, может ещё как-то. fstab пустой. Ставил по этой инструкции.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Deleted

Почему? Например для домашних каталогов проставляется флаг nosuid. Кроме того я могу при желании откатить / на предыдущий снапшот, а все данные (/root, /home/*, /srv, ...) останутся актуальными.

Legioner ★★★★★
() автор топика

ZFS действительно странно вписывается в инит, причём там до недавнего времени висела (а может и сейчас висит) циклическая зависимость между своими же сервисами.

melkor217 ★★★★★
()
Ответ на: комментарий от intelfx
root@home:~# systemctl list-dependencies --after session-${XDG_SESSION_ID}.scope
session-51.scope
● ├─systemd-logind.service
● ├─systemd-user-sessions.service
● └─user-0.slice
Legioner ★★★★★
() автор топика

Что за наркоманство: рут на отдельном разделе? Зачем? Ты не думал, зачем он вообще в корень вынесен, а не в /home находится?

ashot ★★★★
()
Последнее исправление: ashot (всего исправлений: 1)
Ответ на: комментарий от intelfx
systemd-user-sessions.service
● ├─system.slice
● ├─systemd-journal-flush.service
● ├─systemd-journald.socket
● ├─basic.target
● │ ├─-.mount
● │ ├─tmp.mount
● │ ├─var-tmp.mount
● │ ├─paths.target
● │ │ ├─systemd-ask-password-console.path
● │ │ ├─systemd-ask-password-wall.path
● │ │ └─systemd-networkd-resolvconf-update.path
● │ ├─slices.target
● │ │ ├─-.slice
● │ │ ├─system.slice
● │ │ └─user.slice
● │ ├─sockets.target
● │ │ ├─dbus.socket
● │ │ ├─lxd.socket
● │ │ ├─syslog.socket
● │ │ ├─systemd-initctl.socket
● │ │ ├─systemd-journald-audit.socket
● │ │ ├─systemd-journald-dev-log.socket
● │ │ ├─systemd-journald.socket
● │ │ ├─systemd-udevd-control.socket
● │ │ └─systemd-udevd-kernel.socket
● │ └─sysinit.target
● │   ├─apparmor.service
● │   ├─dev-hugepages.mount
● │   ├─dev-mqueue.mount
● │   ├─emergency.service
● │   ├─kmod-static-nodes.service
● │   ├─proc-sys-fs-binfmt_misc.automount
● │   ├─sys-fs-fuse-connections.mount
● │   ├─sys-kernel-config.mount
● │   ├─sys-kernel-debug.mount
● │   ├─systemd-binfmt.service
● │   ├─systemd-hwdb-update.service
● │   ├─systemd-journald.service
● │   ├─systemd-machine-id-commit.service
● │   ├─systemd-modules-load.service
● │   ├─systemd-random-seed.service
● │   ├─systemd-sysctl.service
● │   ├─systemd-timesyncd.service
● │   ├─systemd-tmpfiles-setup-dev.service
● │   ├─systemd-tmpfiles-setup.service
● │   ├─systemd-udev-settle.service
● │   ├─systemd-udev-trigger.service
● │   ├─systemd-udevd.service
● │   ├─systemd-update-utmp.service
● │   ├─cryptsetup.target
● │   ├─emergency.target
● │   │ └─emergency.service
● │   ├─local-fs.target
● │   │ ├─home-vbezhenar.mount
● │   │ ├─home.mount
● │   │ ├─run-lxcfs-controllers-blkio.mount
● │   │ ├─run-lxcfs-controllers-cpu\x2ccpuacct.mount
● │   │ ├─run-lxcfs-controllers-cpuset.mount
● │   │ ├─run-lxcfs-controllers-devices.mount
● │   │ ├─run-lxcfs-controllers-freezer.mount
● │   │ ├─run-lxcfs-controllers-hugetlb.mount
● │   │ ├─run-lxcfs-controllers-memory.mount
● │   │ ├─run-lxcfs-controllers-name\x3dsystemd.mount
● │   │ ├─run-lxcfs-controllers-net_cls\x2cnet_prio.mount
● │   │ ├─run-lxcfs-controllers-perf_event.mount
● │   │ ├─run-lxcfs-controllers-pids.mount
● │   │ ├─run-lxcfs-controllers.mount
● │   │ ├─run-user-0.mount
● │   │ ├─run-user-1000.mount
● │   │ ├─srv.mount
● │   │ ├─systemd-fsck-root.service
● │   │ ├─systemd-remount-fs.service
● │   │ ├─var-cache.mount
● │   │ ├─var-lib-lxcfs.mount
● │   │ ├─var-lib-lxd-containers-plex.zfs.mount
● │   │ ├─var-lib-lxd-devices-plex-disk.srv\x2dmedia.mount
● │   │ ├─var-lib-lxd-images-199e9a37b6aa19a258b89fbbbcf99abb2e00d2b833b00db444...
● │   │ ├─var-lib-lxd-shmounts.mount
● │   │ ├─var-spool.mount
● │   │ ├─zfs-mount.service
● │   │ └─local-fs-pre.target
● │   │   ├─keyboard-setup.service
● │   │   ├─systemd-remount-fs.service
● │   │   └─systemd-tmpfiles-setup-dev.service
● │   └─swap.target
● │     ├─dev-zd0.swap
● │     └─dev-zvol-rpool-swap.swap
● ├─nss-user-lookup.target
● ├─remote-fs.target
● │ └─remote-fs-pre.target
● └─sysinit.target
●   ├─apparmor.service
●   ├─dev-hugepages.mount
●   ├─dev-mqueue.mount
●   ├─emergency.service
●   ├─kmod-static-nodes.service
●   ├─proc-sys-fs-binfmt_misc.automount
●   ├─sys-fs-fuse-connections.mount
●   ├─sys-kernel-config.mount
●   ├─sys-kernel-debug.mount
●   ├─systemd-binfmt.service
●   ├─systemd-hwdb-update.service
●   ├─systemd-journald.service
●   ├─systemd-machine-id-commit.service
●   ├─systemd-modules-load.service
●   ├─systemd-random-seed.service
●   ├─systemd-sysctl.service
●   ├─systemd-timesyncd.service
●   ├─systemd-tmpfiles-setup-dev.service
●   ├─systemd-tmpfiles-setup.service
●   ├─systemd-udev-settle.service
●   ├─systemd-udev-trigger.service
●   ├─systemd-udevd.service
●   ├─systemd-update-utmp.service
●   ├─cryptsetup.target
●   ├─emergency.target
●   │ └─emergency.service
●   ├─local-fs.target
●   │ ├─home-vbezhenar.mount
●   │ ├─home.mount
●   │ ├─run-lxcfs-controllers-blkio.mount
●   │ ├─run-lxcfs-controllers-cpu\x2ccpuacct.mount
●   │ ├─run-lxcfs-controllers-cpuset.mount
●   │ ├─run-lxcfs-controllers-devices.mount
●   │ ├─run-lxcfs-controllers-freezer.mount
●   │ ├─run-lxcfs-controllers-hugetlb.mount
●   │ ├─run-lxcfs-controllers-memory.mount
●   │ ├─run-lxcfs-controllers-name\x3dsystemd.mount
●   │ ├─run-lxcfs-controllers-net_cls\x2cnet_prio.mount
●   │ ├─run-lxcfs-controllers-perf_event.mount
●   │ ├─run-lxcfs-controllers-pids.mount
●   │ ├─run-lxcfs-controllers.mount
●   │ ├─run-user-0.mount
●   │ ├─run-user-1000.mount
●   │ ├─srv.mount
●   │ ├─systemd-fsck-root.service
●   │ ├─systemd-remount-fs.service
●   │ ├─var-cache.mount
●   │ ├─var-lib-lxcfs.mount
●   │ ├─var-lib-lxd-containers-plex.zfs.mount
●   │ ├─var-lib-lxd-devices-plex-disk.srv\x2dmedia.mount
●   │ ├─var-lib-lxd-images-199e9a37b6aa19a258b89fbbbcf99abb2e00d2b833b00db444da...
●   │ ├─var-lib-lxd-shmounts.mount
●   │ ├─var-spool.mount
●   │ ├─zfs-mount.service
●   │ └─local-fs-pre.target
●   │   ├─keyboard-setup.service
●   │   ├─systemd-remount-fs.service
●   │   └─systemd-tmpfiles-setup-dev.service
●   └─swap.target
●     ├─dev-zd0.swap
●     └─dev-zvol-rpool-swap.swap
Legioner ★★★★★
() автор топика
Ответ на: комментарий от ashot

Что за наркоманство: рут на отдельном разделе? Зачем?

Тут описал, зачем.

Ты не думал, зачем он вообще в корень вынесен, а не в /home находится?

Наверняка такой же маразм, как и разделение /bin, /sbin, /usr/bin, /usr/sbin и тд. У кого-то в 1960-м году кончилось место на диске или что-нибудь в этом роде.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от intelfx

Сейчас поэкспериментировал, почему-то не повторяется. Вроде бы работает как положено всё. Или баг связан с «гонкой», или что-то сложнее ситуации, описанной в топике. Собственно факты — после перезагрузки иногда остаётся /root/.bash_history и это не даёт подмонтироваться /root. Остальное были мои предположения.

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

Что я туда положу, то и пригодится. Вопрос немного странный. Конфиги, логи, какие-то файлы с данными.

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

Конфиги, логи, какие-то файлы с данными.

Один конфиг для разных снепшотов? В разных версиях прог, часто меняют и конфиги. Логи в рут? .bash_history если только. Файлы с данными?

Вопрос немного странный.

Твои желания немного странные. Есть удобная и продуманная иерархия, а ты изобретаешь что-то непонятное.

Что я туда положу, то и пригодится.

Тут не поспоришь.

ashot ★★★★
()

Во, теперь и /var/log не подмонтировался, совсем весело. Это я настроил persistent-логи у journald. Похоже он их сбрасывает в конце выключения после отмонтирования всех ФС.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Legioner

Да, это определённо гонка. Кто-то недосыпал зависимостей в юниты точек монтирования ФС, и я даже догадываюсь, кто.

А покажи юнит zfs-mount.service и на рабочей системе покажи вывод systemctl show /root, например.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от Legioner

ээээ ты это в /root кладёшь??? Оригинально. Свежо. Бессмысленно.

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

Это на рабочей системе, в которой всё нормально загрузилось.

# systemctl status zfs-mount.service
● zfs-mount.service - Mount ZFS filesystems
   Loaded: loaded (/lib/systemd/system/zfs-mount.service; static; vendor preset:
   Active: active (exited) since Thu 2016-08-04 18:58:39 +06; 36min ago
  Process: 3761 ExecStart=/sbin/zfs mount -a (code=exited, status=0/SUCCESS)
 Main PID: 3761 (code=exited, status=0/SUCCESS)
    Tasks: 0
   Memory: 0B
      CPU: 0
   CGroup: /system.slice/zfs-mount.service

Aug 04 18:58:38 home systemd[1]: Starting Mount ZFS filesystems...
Aug 04 18:58:39 home systemd[1]: Started Mount ZFS filesystems.
root@home:~# cat /lib/systemd/system/zfs-mount.service
[Unit]
Description=Mount ZFS filesystems
DefaultDependencies=no
Wants=zfs-import-cache.service
Wants=zfs-import-scan.service
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service
After=zfs-import-cache.service
After=zfs-import-scan.service
Before=local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/zfs mount -a
root@home:~# systemctl show /root
Where=/root
What=rpool/home/root
Options=rw,nosuid,noatime,xattr,noacl
Type=zfs
TimeoutUSec=1min 30s
ControlPID=0
DirectoryMode=0755
SloppyOptions=no
Result=success
Slice=system.slice
ControlGroup=/system.slice/root.mount
MemoryCurrent=0
CPUUsageNSec=0
TasksCurrent=0
Delegate=no
CPUAccounting=no
CPUShares=18446744073709551615
StartupCPUShares=18446744073709551615
CPUQuotaPerSecUSec=infinity
BlockIOAccounting=no
BlockIOWeight=18446744073709551615
StartupBlockIOWeight=18446744073709551615
MemoryAccounting=no
MemoryLimit=18446744073709551615
DevicePolicy=auto
TasksAccounting=no
TasksMax=18446744073709551615
UMask=0022
LimitCPU=18446744073709551615
LimitCPUSoft=18446744073709551615
LimitFSIZE=18446744073709551615
LimitFSIZESoft=18446744073709551615
LimitDATA=18446744073709551615
LimitDATASoft=18446744073709551615
LimitSTACK=18446744073709551615
LimitSTACKSoft=8388608
LimitCORE=18446744073709551615
LimitCORESoft=0
LimitRSS=18446744073709551615
LimitRSSSoft=18446744073709551615
LimitNOFILE=4096
LimitNOFILESoft=1024
LimitAS=18446744073709551615
LimitASSoft=18446744073709551615
LimitNPROC=15489
LimitNPROCSoft=15489
LimitMEMLOCK=65536
LimitMEMLOCKSoft=65536
LimitLOCKS=18446744073709551615
LimitLOCKSSoft=18446744073709551615
LimitSIGPENDING=15489
LimitSIGPENDINGSoft=15489
LimitMSGQUEUE=819200
LimitMSGQUEUESoft=819200
LimitNICE=0
LimitNICESoft=0
LimitRTPRIO=0
LimitRTPRIOSoft=0
LimitRTTIME=18446744073709551615
LimitRTTIMESoft=18446744073709551615
OOMScoreAdjust=0
Nice=0
IOScheduling=0
CPUSchedulingPolicy=0
CPUSchedulingPriority=0
TimerSlackNSec=50000
CPUSchedulingResetOnFork=no
NonBlocking=no
StandardInput=null
StandardOutput=journal
StandardError=inherit
TTYReset=no
TTYVHangup=no
TTYVTDisallocate=no
SyslogPriority=30
SyslogLevelPrefix=yes
SyslogLevel=6
SyslogFacility=3
SecureBits=0
CapabilityBoundingSet=18446744073709551615
AmbientCapabilities=0
MountFlags=0
PrivateTmp=no
PrivateNetwork=no
PrivateDevices=no
ProtectHome=no
ProtectSystem=no
SameProcessGroup=yes
UtmpMode=init
IgnoreSIGPIPE=yes
NoNewPrivileges=no
SystemCallErrorNumber=0
RuntimeDirectoryMode=0755
KillMode=control-group
KillSignal=15
SendSIGKILL=yes
SendSIGHUP=no
Id=root.mount
Names=root.mount
Requires=system.slice
Conflicts=umount.target
Before=umount.target local-fs.target emergency.service rescue.service
After=-.mount local-fs-pre.target systemd-journald.socket system.slice
RequiresMountsFor=/
Description=/root
LoadState=loaded
ActiveState=active
SubState=mounted
SourcePath=/proc/self/mountinfo
StateChangeTimestamp=Thu 2016-08-04 18:58:39 +06
StateChangeTimestampMonotonic=14675420
InactiveExitTimestamp=Thu 2016-08-04 18:58:39 +06
InactiveExitTimestampMonotonic=14675420
ActiveEnterTimestamp=Thu 2016-08-04 18:58:39 +06
ActiveEnterTimestampMonotonic=14675420
ActiveExitTimestampMonotonic=0
InactiveEnterTimestampMonotonic=0
CanStart=yes
CanStop=yes
CanReload=yes
CanIsolate=no
StopWhenUnneeded=no
RefuseManualStart=no
RefuseManualStop=no
AllowIsolate=no
DefaultDependencies=yes
OnFailureJobMode=replace
IgnoreOnIsolate=yes
NeedDaemonReload=no
JobTimeoutUSec=infinity
JobTimeoutAction=none
ConditionResult=no
AssertResult=no
ConditionTimestampMonotonic=0
AssertTimestampMonotonic=0
Transient=no
StartLimitInterval=10000000
StartLimitBurst=5
StartLimitAction=none
root@home:~# systemctl show /var/log
Where=/var/log
What=rpool/var/log
Options=rw,nosuid,noexec,noatime,xattr,noacl
Type=zfs
TimeoutUSec=1min 30s
ControlPID=0
DirectoryMode=0755
SloppyOptions=no
Result=success
Slice=system.slice
ControlGroup=/system.slice/var-log.mount
MemoryCurrent=0
CPUUsageNSec=0
TasksCurrent=0
Delegate=no
CPUAccounting=no
CPUShares=18446744073709551615
StartupCPUShares=18446744073709551615
CPUQuotaPerSecUSec=infinity
BlockIOAccounting=no
BlockIOWeight=18446744073709551615
StartupBlockIOWeight=18446744073709551615
MemoryAccounting=no
MemoryLimit=18446744073709551615
DevicePolicy=auto
TasksAccounting=no
TasksMax=18446744073709551615
UMask=0022
LimitCPU=18446744073709551615
LimitCPUSoft=18446744073709551615
LimitFSIZE=18446744073709551615
LimitFSIZESoft=18446744073709551615
LimitDATA=18446744073709551615
LimitDATASoft=18446744073709551615
LimitSTACK=18446744073709551615
LimitSTACKSoft=8388608
LimitCORE=18446744073709551615
LimitCORESoft=0
LimitRSS=18446744073709551615
LimitRSSSoft=18446744073709551615
LimitNOFILE=4096
LimitNOFILESoft=1024
LimitAS=18446744073709551615
LimitASSoft=18446744073709551615
LimitNPROC=15489
LimitNPROCSoft=15489
LimitMEMLOCK=65536
LimitMEMLOCKSoft=65536
LimitLOCKS=18446744073709551615
LimitLOCKSSoft=18446744073709551615
LimitSIGPENDING=15489
LimitSIGPENDINGSoft=15489
LimitMSGQUEUE=819200
LimitMSGQUEUESoft=819200
LimitNICE=0
LimitNICESoft=0
LimitRTPRIO=0
LimitRTPRIOSoft=0
LimitRTTIME=18446744073709551615
LimitRTTIMESoft=18446744073709551615
OOMScoreAdjust=0
Nice=0
IOScheduling=0
CPUSchedulingPolicy=0
CPUSchedulingPriority=0
TimerSlackNSec=50000
CPUSchedulingResetOnFork=no
NonBlocking=no
StandardInput=null
StandardOutput=journal
StandardError=inherit
TTYReset=no
TTYVHangup=no
TTYVTDisallocate=no
SyslogPriority=30
SyslogLevelPrefix=yes
SyslogLevel=6
SyslogFacility=3
SecureBits=0
CapabilityBoundingSet=18446744073709551615
AmbientCapabilities=0
MountFlags=0
PrivateTmp=no
PrivateNetwork=no
PrivateDevices=no
ProtectHome=no
ProtectSystem=no
SameProcessGroup=yes
UtmpMode=init
IgnoreSIGPIPE=yes
NoNewPrivileges=no
SystemCallErrorNumber=0
RuntimeDirectoryMode=0755
KillMode=control-group
KillSignal=15
SendSIGKILL=yes
SendSIGHUP=no
Id=var-log.mount
Names=var-log.mount
Requires=system.slice
Conflicts=umount.target
Before=umount.target local-fs.target systemd-update-utmp.service systemd-update-utmp-runlevel.service systemd-journal-flush.service
After=-.mount local-fs-pre.target systemd-journald.socket system.slice
RequiresMountsFor=/var
Description=/var/log
LoadState=loaded
ActiveState=active
SubState=mounted
SourcePath=/proc/self/mountinfo
StateChangeTimestamp=Thu 2016-08-04 18:58:39 +06
StateChangeTimestampMonotonic=15149825
InactiveExitTimestamp=Thu 2016-08-04 18:58:39 +06
InactiveExitTimestampMonotonic=15149825
ActiveEnterTimestamp=Thu 2016-08-04 18:58:39 +06
ActiveEnterTimestampMonotonic=15149825
ActiveExitTimestampMonotonic=0
InactiveEnterTimestampMonotonic=0
CanStart=yes
CanStop=yes
CanReload=yes
CanIsolate=no
StopWhenUnneeded=no
RefuseManualStart=no
RefuseManualStop=no
AllowIsolate=no
DefaultDependencies=yes
OnFailureJobMode=replace
IgnoreOnIsolate=yes
NeedDaemonReload=no
JobTimeoutUSec=infinity
JobTimeoutAction=none
ConditionResult=no
AssertResult=no
ConditionTimestampMonotonic=0
AssertTimestampMonotonic=0
Transient=no
StartLimitInterval=10000000
StartLimitBurst=5
StartLimitAction=none
Legioner ★★★★★
() автор топика

/root должен быть в корне. Это стандарт.

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

Очень странно. Вроде все требуемые зависимости на месте...

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