root@system:~# less myfile
-bash: /bin/less: Input/output error
Run Code Online (Sandbox Code Playgroud)
根文件系统已死。但我的猫还活着(在我的记忆中):
root@system:~# cat > /tmp/somefile
C^d
root@system:~#
Run Code Online (Sandbox Code Playgroud)
虽然他有点孤独,但他所有的朋友都走了:
root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error
Run Code Online (Sandbox Code Playgroud)
该系统仍在运行,并实现其目的。我知道,我知道,对此唯一明智的反应是关闭系统并更换根驱动器。不幸的是,这不是一个选择,因为它会花费大量的时间和金钱。此外,它会杀死我的猫,这会让我感到难过。
我想从捐赠者那里带他平时的朋友。我不敢尝试 scp 它们,以防 ssh 尝试加载它并切断线路(无论如何二进制文件已经消失了)。这听起来像是我猫表弟的工作:
root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found
Run Code Online (Sandbox Code Playgroud)
可惜他早已不在了。
现在,我可以尝试欺骗我的猫执行一个仪式来复活他:
cat > netcat < /dev/tcp/localhost/9999
Run Code Online (Sandbox Code Playgroud)
那种工作。他几乎还活着:
root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied
Run Code Online (Sandbox Code Playgroud)
他只需要一点点生命的火花。那个+x我现在无法背诵的小魔法咒语。
你能帮我把我猫的朋友带回来吗?
我正在对 进行一些更改/etc/fstab,当我遇到这个鸡和蛋的问题时 - 如果/etc/fstab包含安装文件系统的说明,包括根分区,那么操作系统首先如何读取该文件?
这是一个常见的场景。无论出于何种原因,initramfs(OpenSUSE,以防万一)未能找到根文件系统,因此它会将您置于救援外壳中。我非常清楚需要安装什么设备。我的问题:
挂载根文件系统并继续引导顺序的正确步骤是什么?
大概这就是救援控制台的全部意义所在。然而,似乎没有人记录你是如何做到这一点的。
显然我可以在某处挂载根文件系统。但是我如何使它成为文件系统树的根?现在我在那之后继续正常的启动过程吗?(我以为只要退出 shell 就可以了……但事实并非如此。)在继续之前,您究竟需要安装什么,以及如何继续?
这是一个关于用户空间应用程序的问题,但听我说!
可以这么说,启动 Linux 的功能性发行版需要三个“应用程序”:
Bootloader - 对于嵌入式,通常是 U-Boot,虽然不是硬性要求。
内核 - 这很简单。
根文件系统 - 没有它就无法引导到 shell。包含内核引导到的文件系统,其中init称为 form。
我的问题是关于#3。如果有人想构建一个极小的 rootfs(对于这个问题,我们假设没有 GUI,只有 shell),启动到 shell 需要哪些文件/程序?
我的任务是在嵌入式设备上将 Linux 作为操作系统运行。
目标具有 x86 处理器和 8 GB CompactFlash 设备用于存储。
我已经设法使用 buildroot 创建内核映像和交叉编译工具。我已将 CF 设备分区为一个小的 FAT 分区,其中包含内核映像以及syslinux引导配置和一个ext3文件系统,我已将 buildroot 生成的根文件系统解压缩到其中。
syslinux通过将根目录设置为我的 buildroot 文件系统所在的 CF ext3 分区,系统启动成功。
我的问题集中在面对立即(和频繁)断电时对稳健性的需求,因为断电后设备成功启动至关重要。我读过将根文件系统挂载为只读是确保数据完整性的一种方式。这是我继续的明智方式吗?
我还阅读了有关将根文件系统加载到 RAM 中以实现相同目的的可能性,但目前还不知道如何执行此操作。
是否有实现这一目标的首选方法,如果有,我继续前进的最佳方法是什么?
是否可以使用通过 virtfs/9p从主机共享到来宾的文件夹作为来宾内部的根文件系统?
与我之前的问题松散相关:可以使用 virtfs/9p 与多个来宾共享同一个主机文件夹吗?
我在各种 Linux 系统上看到过/dev/sda1,根设备不是真实设备节点(例如:)/dev/root,而是显示为,或者不是真实文件系统,mtab表示它是一个名为rootfs(在 中显示为真实文件系统/proc/filesystems,但是中没有代码<linux-kernel-source-tree>/fs)。已经制作了各种实用程序来使用某些属性来确定真正的根设备节点(例如 rdev 和 Chromium OS rootdev)。除了在某处读到非常小的嵌入式设备并不总是必须/dev为它们的根设备提供设备节点之外,我找不到任何合乎逻辑的解释。(这是真的吗,如果是,那是我问题的答案吗?)为什么 mtab 有时会说/dev/root(我想我可能已经看到它说rootdev一次)而不是真实设备节点,我怎样才能让它总是说真实设备节点?内核首先root按照cmdline中的参数挂载root设备,然后init/systemd按照 重新挂载,对fstab吗?如果是这样,那么我认为我注意到这init维护mtab. 如果我的理论是正确的,我怎样才能init将真正的根设备节点写入mtab?/etc/mtab实际上是到 的符号链接/proc/mounts,这意味着mtab由内核维护。那么,如何配置/修补内核,而不是说的根设备节点的路径/dev/root,已经mtab包含了真实的设备节点?
我正在尝试学习 POSIX 标准。使用 Unix 时,我有/bin, /etc, /dev, /media, 和 通常/opt,但这是标准化的还是符合您的规范实现?根目录下可能有很多目录,还是受标准限制?
我是 linux 的忠实粉丝,喜欢时不时尝试新的发行版。我通常将我的主文件夹和根目录放在加密分区上的 lvm 中,但这往往会变得很麻烦,因为每个 initramfs 创建过程都比上一个更陌生。
我重视隐私,但我的大部分宝贵信息或个人信息都存储在主文件夹中。此外,我使用 GPT 进行了分区,因此即使在 lvm 之外设置多个分区也不难。
所以问题是:根加密和“/”的 lvm-ing 是否值得,尤其是我必须处理的所有早期用户空间麻烦?
不小心跑了sudo rm -r /tmp,有问题吗?
我用 重新创建了它sudo mkdir /tmp,这能解决问题吗?
在我重新创建目录后,在Ubuntu 14.04 中 nautilus 侧边栏中的位置部分,我可以看到 /tmp ,它之前不存在......这是一个问题吗?
最后一件事,我是否必须运行sudo chown $USER:$USER /tmp才能像以前一样访问它.. 之后会不会有任何副作用?
顺便说一句,当我尝试使用 bash 自动完成功能时,我遇到了这个看似相关的错误
bash:无法为此处文档创建临时文件:权限被拒绝
root-filesystem ×10
filesystems ×3
startup ×3
boot ×2
embedded ×2
linux ×2
architecture ×1
bash ×1
buildroot ×1
cat ×1
encryption ×1
files ×1
fstab ×1
initramfs ×1
kvm ×1
lvm ×1
mkdir ×1
mount ×1
opensuse ×1
permissions ×1
posix ×1
ram ×1
readonly ×1
rm ×1
virtfs ×1