mount -a 有效,但在启动时失败并显示“找不到 UUID”

mount -a 有效,但在启动时失败并显示“找不到 UUID”

我刚刚将我的服务器升级到 Debian Buster (Raspbian)。但是,当我现在启动时,我的 USB 硬盘未安装。我在启动屏幕上看到类似以下内容:

mount: /media/PiHDD: can't find UUID=<string>

如果我手动安装sudo mount -a,则所有硬盘都已安装

以下是/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
...

在更新至 Buster 之前,它运行良好。

我还尝试根据 的输出使用PARTUUID或来识别硬盘驱动器,但这些在使用等启动时也会失败。LABELblkidcan't find LABEL

我没有使用 systemd (PID 1 是 init,并file /sbin/init提供可执行文件)。/sbin/init --version给出SysV init version: 2.93.我已更新到最新(测试)内核4.19.57-v7+

启动时,我认为我的系统在尝试安装 USB 设备之前会看到它们。我可以New USB device found在安装失败之前看到。我也在Attached SCSI disk找到设备后看到,但我不确定它是在安装失败之前还是之后。这一切都在/var/log/syslog,但由于某种原因mount… can't find UUID,我在启动时看到的错误不在/var/log.

如何让我的系统在启动时自动挂载 USB 硬盘?

以下是 的内容/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

答案1

使用 sysvinit,您将拥有三个早期启动脚本:“sysinit”、“bootwait”和“boot”(通过 /etc/inittab)。它们在启动运行级别之前安装设备和加载模块等。

root 已经安装,/proc 是第一个需要的。 /sys 也可能。

稍后尝试安装 UUID 设备。这意味着您必须mount -a稍微分开,并以不同的方式在 /etc/fstab 中分发(无)auto 选项。 /proc 和外部存储实际上并不属于同一安装步骤。

想想 systemd 和所有这些“依赖项”。

在挂载 UUID-USB 设备之前,必须需要某些模块(驱动程序)。

(如果你使用 initrd 它会变得有点复杂。我知道它如何挂起等待“按标签”设备)


要改变你就必须看看/etc/inittab。以下是我的一些台词:

...
# Simple "old Linux" inittab from manpage:
# one (default) runlevel, 4 gettys, one bootwait rc-script
id:2:initdefault:

# sysinit/boot-scripts, they run first
#si::sysinit:/etc/sysinit.init 

bw::bootwait:/etc/boot.init

# b::boot:/etc/rc
...

这是 /etc/boot.init (“bootwait”脚本):

#! /bin/bash
# Boot script, as defined in sysv inittab

echo  "$0: starting...."

mountpoint /proc || mount -v -t proc  Proc /proc   
mountpoint /sys || mount -v -t sysfs Sys  /sys 

# root ro -> rw ?
# fed is ro, arch rw...
mount -o remount /

# Modules: for keyboard
modprobe -a xhci-pci usbhid hid-generic         # i2c-hid 

echo 0 > /sys/devices/virtual/graphics/fbcon/cursor_blink

echo "...$0 done"

当我用 sysvinit 启动时,这就是我所需要的。重要的部分是键盘模块!如果你的键盘没电了,什么都不能用! proc 和 sys 的挂载有点奢侈——只需注意我如何手动挂载这两个虚拟设备即可。我曾尝试使用/etc/fstab,但没有多大意义。最小的命令只是mount -t proc none /proc

我需要这个mountpoint ... || mount命令,因为 systemd initrd 已经安装了 proc、sys 和 run (tmpfs)。我不想看到“已安装”错误,而是看到正确的输出。这不是 systemd,但通过一个简单的脚本您就可以完成基础知识。

答案2

我看起来 SysV 现在维护得很差。我转移到 systemd,并且没有任何配置更改,我的驱动器现在按预期安装在启动时。

FWIW 在 Debian/Raspbian 上,我刚刚做了sudo apt-get purge sysvinit-core,它也自动安装了libnss-systemdsystemd-sysv.

相关内容