像 eSATA、USB 驱动器这样的可拆卸设备可以突然移除(只需拔掉插头)。
如果分区上有打开的文件句柄,则该分区不会卸载,即 Linuxumount命令将失败,即使在驱动器被物理分离后也是如此。
如果卸载失败,则在重新连接设备时,mount也将失败。因此,您必须找出哪些进程正在使用驱动器并杀死它们或关闭所有句柄。如果您不能这样做,则必须重新启动盒子才能安装驱动器。而且我绝对不能终止使用它的进程。
我看不到“强制卸载”选项,有一个-f选项,但它仅适用于 NFS。
这听起来很奇怪,Linux 不适应用户简单地猛拉驱动器的这种情况吗?有谁知道如何在 Linux 中优雅地处理这种情况?
有什么方法可以找出在特定分区/设备上打开了哪些文件句柄,或者仅针对特定设备有选择地刷新和关闭所有文件句柄?
注意:该lsof命令在我使用的嵌入式 Linux (busybox) 中不可用。
“fuser”在我的嵌入式 linux 中不可用。
我尝试了懒惰的 umount -l。但是,它似乎并不能始终如一地工作。比如说,我保持一个文件句柄打开(在设备上的某个文件上使用“tail -f”)。然后我分离一个驱动器,然后我执行“umount -l”并卸载它。然后我重新连接驱动器并尝试在相同的安装点上再次安装它,而尾部仍在运行。它不能始终如一地工作。有时它会成功,有时它不会。这让我不舒服使用惰性选项,如果它使文件系统处于不一致状态怎么办。而且也不确定这个懒惰的选项是否打算用于这种情况。
我无法终止打开文件句柄的进程。
似乎我已经将设备安装在 /mnt/abc 上,如果我断开驱动器然后重新连接,Linux 似乎将设备的文件系统重新附加到相同的安装点“/mnt/abc”,而我们没有做任何事情卸载或安装。然后相同的旧打开文件句柄似乎在重新附加后开始工作(至少对于文件读取操作)。这是我的观察。我不确定这是否是预期的行为。但是,这似乎也没有持续有效。
我有一个用于读取的打开文件句柄(“tail -f”),我将其保持打开状态,然后我分离并重新附加,然后修改了被拖尾的文件,我看到“tail -f”输出随着更改而更新。但是,如果我在设备消失后尝试修改文件(它按预期给出错误)然后重新附加,则设备的文件系统无法正确重新附加到相同的安装点。在文件写入的情况下(当设备不存在时)它似乎不起作用。
当突然移除驱动器而不关闭所有句柄并正确卸载所有分区时,Linux 是否遵循任何标准/一致的行为?
由于内核kernel-3.10.0-229.1.2.el7.x86_64错误,最新的内核在我的 CentOS 7 机器上启动时发生了错误。
由于这个内核是 GRUB 中的默认内核,如果我忘记在启动时手动更改内核选择,我的机器就会崩溃。
两个问题:
yum update?我是 Fedora 的新手,我决定在我的新笔记本电脑而不是 Ubuntu 上试用它。我有一台 XPS 13 (9343),但声音不起作用。我在网上进行了研究,发现人们已经成功安装了最新的 rc 内核。
找到的内核是kernel-4.4.0-0.rc4.git3.1.fc24。我做了一些谷歌搜索之后,我下载了 kernel-4.4.0-0.rc4.git3.1.fc24.x86_64.rpm 并尝试像这样安装它:
sudo rpm -Uhv kernel-4.4.0-0.rc2.git2.1.fc24.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)
现在我可以在启动时选择内核,但我不知道如何检查我是否正确安装了它。文件只有 ~55KB。这就是全部?
我还从该 url 获取了源代码,安装了依赖项,然后像下面这样安装了内核源代码,但内核没有显示在可用内核列表中:
su -c 'dnf builddep kernel-4.4.0-0.rc4.git3.1.fc24.src.rpm'
sudo rpm -Uhv kernel-4.4.0-0.rc4.git3.1.fc24.src.rpm
Run Code Online (Sandbox Code Playgroud)
我在这上面花了 3 个多小时,但找不到关于如何安装内核的任何好的指导……最推荐使用,dnf install kernel-devel但这不是我想要的版本。
我需要自己编译源代码吗?
如何添加内核所在的存储库并尝试使用 dnf 安装它?
我正在启动一个新的 Xen 内核,一切正常,直到机器在没有警告的情况下重新启动的启动过程中的某个时刻。不幸的是,我没有看到错误在发生之前闪现。
有没有办法用工作内核启动机器并查看上次启动的日志或其他东西?
编辑:我没有注意到的是屏幕上实际上有一个错误。它只是在重新启动之前快速闪烁。该错误与无法挂载根文件系统有关,因为我的 grub 配置有问题。
grub.cfg 中的正常条目如下所示:
menuentry 'Ubuntu, with Linux 2.6.32-33-server' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 75475e50-82e2-4f74-b860-6cf92c91b42e
linux /vmlinuz-2.6.32-33-server root=/dev/mapper/xenserver-root ro crashkernel=384M-2G:64M,2G-:128M
initrd /initrd.img-2.6.32-33-server
}
Run Code Online (Sandbox Code Playgroud)
我在 /etc/grub.d/40_default 中添加了以下内容
menuentry 'Xen 4 with Linux 2.6.32.45-xen' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set=root 75475e50-82e2-4f74-b860-6cf92c91b42e
echo 'Loading Xen 4 ...'
multiboot /xen.gz placeholder
echo …Run Code Online (Sandbox Code Playgroud) 我是内核开发的新手,我必须编译具有某些特定功能的内核,然后将其安装在某些机器上。问题是这些机器很慢,因此我想在快速桌面上编译它们一次,然后将它们安装在机器上。我正在遵循Ubuntu wiki 中的本指南。
所以我打算做的是,下载源代码并在其中一台较慢的机器上生成一个配置文件,将两者都复制到较快的机器上,在较快的机器上生成映像,然后将其安装在所有较慢的机器上。慢速机器几乎相同(相同的卡、处理器、操作系统等),但与快速机器不同(不同的操作系统和处理器)。那么这会奏效吗?我用谷歌搜索,但唯一相关的结果似乎已经有好几年了。(他们说它工作正常,顺便说一句)。
我希望将一个进程固定到我的双 CPU 机器中的 CPU1 - 我如何在 Linux 中做到这一点 - 任何指针?
我刚刚开始在 RaspberryPi 上使用 3G 调制解调器,使用来自 linux 内核的“库存”USB 串行驱动程序(如调制解调器文档中所示)。一旦调制解调器被识别并显示为串行 USB ( /dev/ttyUSB[0-4]),我就可以使用它pppd call [module]来使用串行设备来创建整个系统可用的网络接口。
然后,一旦pppd启动并且一切正常,我可以使用常用工具 ping/下载/任何东西。但是当我下载大图像时,我的下载速率约为 300-400KiB/s。这怎么可能,因为我要求 pppd 启动 115200 波特串行连接???(115200 b/s 应该给我 10KiB/s 的理论最高速度)。在串行连接中也禁用压缩。
这引出了我的问题:这个驱动程序到底在做什么?连接的任何硬件部分实际上是串行的(异步的?)?如果不是,为什么叫串行?
在很长一段时间内,我使用
echo disk > /sys/power/state
Run Code Online (Sandbox Code Playgroud)
为了休眠/dev/sda10,我使用 Debian 发行版的 initrd 来恢复。
但是最近,我切换到了一个需要我使用完全自定义的 initramfs 的 raid 阵列(我必须从头开始构建它,因为尝试修改现有的 initrd 没有奏效)以便在挂载 root 之前设置?划分。
有两种恢复方式:内核可以直接读取带有resume=内核参数的交换文件系统(并且它会在启动 init 之前恢复)?或者它需要一些用户空间(例如加载模块)才能访问交换分区。
那么用户空间命令是什么才能从 /dev/mapper/isw_qfyzrvbsusf_Volume0p9??
我试图在我的 CentOS 机器上使用 Brave Browser,但是当我尝试运行它时,它给了我以下错误。
[19576:19576:0208/180128.818448:FATAL:zygote_host_impl_linux.cc(126)] 没有可用的沙箱!更新您的内核或查看https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md以了解有关使用 SUID 沙箱进行开发的更多信息。如果您想危险地生活并需要立即解决方法,您可以尝试使用 --no-sandbox。鱼:“./brave”由信号 SIGABRT(中止)终止
该项目的 git 页面说我可能会收到有关沙箱的错误,并提出了解决方案。
这是它所说的:
注意:如果 Brave 没有启动并显示有关沙盒的错误,您可能需要在内核中启用用户。不建议使用 --no-sandbox 标志运行!
现在,我有三个主要问题:
1) 用户到底在做什么?我曾尝试阅读有关用户命名空间的手册页,但对我来说事情有点复杂,所以我希望得到一些解释。
2)如果我启用用户可以吗,或者它会导致一些问题吗?
3)如果可以,我该怎么做?这是我找到的方法,但我不确定这是否是最好的方法。
https://luppeng.wordpress.com/2016/07/08/user-namespaces-with-cent-os-7-rhel/
所有 Linux 都应该带有vmlinuz“ /”和“ /boot/”。但是,我的系统没有它:
% ls -l /vmlinuz* /initrd* /boot/vmlinuz*
ls: cannot access '/vmlinuz*': No such file or directory
ls: cannot access '/initrd*': No such file or directory
ls: cannot access '/boot/vmlinuz*': No such file or directory
Run Code Online (Sandbox Code Playgroud)
怎么才能把三个都找回来呢?
我试过,
apt-get install --reinstall linux-image-generic linux-headers-generic
update-initramfs -u
Run Code Online (Sandbox Code Playgroud)
根据我读过的文章,这应该已经解决了问题,因为实际的软件包也会重新安装:
% apt-get install --reinstall linux-image-generic linux-headers-generic
Preparing to unpack .../linux-headers-generic_4.15.0.20.23_amd64.deb ...
Unpacking linux-headers-generic (4.15.0.20.23) over (4.15.0.20.23) ...
Preparing to unpack .../linux-image-generic_4.15.0.20.23_amd64.deb ...
Unpacking linux-image-generic (4.15.0.20.23) over (4.15.0.20.23) ... …Run Code Online (Sandbox Code Playgroud)