Acabei de atualizar meu servidor para o Debian Buster (Raspbian). No entanto, quando inicializo, meus discos rígidos USB não estão sendo montados. Eu vejo algo como o seguinte na minha tela inicial:
mount: /media/PiHDD: can't find UUID=<string>
Se eu manualmente sudo mount -a
, todos os discos rígidos são montados
O seguinte é /etc/fstab
:
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 0
/dev/mmcblk0p2 / ext4 defaults,noatime 0 0
UUID=<string> /media/PiHDD ext4 defaults,noatime 0 0
UUID=<string2> /media/PiHDD2 ext4 defaults,noatime 0 0
...
que funcionou bem antes da atualização para o Buster.
Eu também tentei identificar os discos rígidos usando PARTUUID
ou LABEL
, com base na saída de blkid
, mas eles também falham na inicialização com can't find LABEL
, etc.
Não estou usando o systemd (PID 1 é init, e file /sbin/init
dá um executável). /sbin/init --version
dá SysV init version: 2.93
. Eu atualizei para o kernel mais recente (de teste) 4.19.57-v7+
.
Na inicialização, acho que meu sistema está vendo os dispositivos USB antes de tentar montá-los. Eu posso ver New USB device found
antes que a montagem falhe. Também vejo Attached SCSI disk
depois que o dispositivo é encontrado, mas não tenho certeza se é antes ou depois da montagem com falha. Isso é tudo /var/log/syslog
, mas por algum motivo os mount… can't find UUID
erros que vejo na inicialização não estão em nenhum arquivo em /var/log
.
Como posso fazer com que meu sistema monte automaticamente meus discos rígidos USB na inicialização?
Aqui está o conteúdo do /etc/inittab
.
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
# The default runlevel.
id:2:initdefault:
# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop
# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty --noclear 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Com o sysvinit você tem três scripts iniciais de inicialização: "sysinit", "bootwait" e "boot" (via /etc/inittab). Eles montam dispositivos e carregam módulos etc. ANTES dos níveis de execução serem iniciados.
Root já está montado, /proc é o primeiro necessário. /sys provavelmente também.
Tente montar os dispositivos UUID um pouco DEPOIS. Isso significa que você precisa dividir
mount -a
um pouco e distribuir as opções (no)auto em /etc/fstab de maneira diferente. /proc e um armazenamento externo não pertencem à mesma etapa de montagem.Pense no systemd e em todas essas "dependências".
Deve ser algum módulo (driver) necessário antes que o dispositivo UUID-USB possa ser montado.
(Se você usar o initrd fica um pouco complicado. Eu sei como ele pode travar esperando por um dispositivo "by-label")
Para mudar você teria que olhar para
/etc/inittab
. Seguem algumas linhas do meu:E este é /etc/boot.init (o script "bootwait"):
Isso é tudo que eu preciso quando inicializo com o sysvinit. Parte essencial foi o módulo de teclado! Nada pode funcionar se o seu teclado estiver morto! A montagem de proc e sys é um pouco luxuosa - apenas observe como eu monto esses dois dispositivos virtuais manualmente. Eu tentei usar /etc/fstab, mas não fazia muito sentido. O comando mínimo é apenas
mount -t proc none /proc
O
mountpoint ... || mount
comando que eu precisava porque um initrd do systemd já vem com proc, sys e run (tmpfs) montados. E eu não queria ver o erro "já montado", mas uma saída correta. Isso não é systemd, mas com um script simples você pode fazer o básico.Parece que o SysV agora está mal mantido. Mudei para o systemd e sem nenhuma alteração de configuração, minhas unidades agora estão montadas na inicialização conforme o esperado.
FWIW no Debian/Raspbian, acabei de fazer o
sudo apt-get purge sysvinit-core
, que também instalou automaticamentelibnss-systemd
e osystemd-sysv
.