AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-20140

Philip Couling's questions

Martin Hope
Philip Couling
Asked: 2023-09-16 05:15:05 +0800 CST

systemd *.device 单元实际上在等待什么?

  • 5

我的系统在 systemd 尝试挂载文件系统时卡住了。它因依赖项超时而失败。依赖关系是dev-disk-by\x2dlabel-cb\x2drootfs.device正在安装的设备所在的位置/dev/disk/by-label/cb-rootfs。

systemd[1]: dev-disk-by\x2dlabel-cb\x2drootfs.device: Job dev-disk-by\x2dlabel-cb\x2drootfs.device/start timed out.

没有什么可以阻止我安装系统:

mount -av

因此,在这种情况下,systemd 似乎正在等待错误的事情,因为设备显然已经在那里并准备好安装。


可能使事情变得复杂的是根文件系统是涉及同一设备的overlayfs。简单来说,initramfs 是这样做的:

mount /dev/disk/by-label/cb-rootfs /host
mount -o loop /host/rootfs/foo.squashfs /ro
mount -t overlay overlay lowerdir=/ro,upperdir=/host/writable,workdir=/host/workdir /root

/root那么根文件系统是否已准备好让 systemd 开始挂载/etc/fstab:

然后/etc/fstab尝试挂载

/dev/disk/by-label/cb-rootfs /host ext4 defaults 0 0

正如我所说,我可以mount -av,并且 Linux 挂载 `/dev/disk/by-label/cb-rootfs 绝对没有问题。但 systemd 显然正在无休止地等待它以某种方式准备就绪。

systemd 还在等什么?我怎样才能避免这样等待呢?

systemd
  • 1 个回答
  • 29 Views
Martin Hope
Philip Couling
Asked: 2023-08-25 12:37:59 +0800 CST

进程退出时循环设备可以自动清理吗?

  • 9

我正在尝试找出一种干净且安全的方法来在构建脚本内使用循环设备。据我所知,如果您想要(GPT)分区和(FAT32,EXT3)格式化稀疏文件1 ,则需要循环设备。

例如:假设我有这个脚本:

#!/bin/bash
set -ex
truncate --size 4G target.img
sfdisk target.img < partitions
loop_device=$(losetup -f --show target.img)
trap "losetup -d $loop_device" EXIT
partx -u $(loop_device)
mkfs.vfat ${loop_device}p1
mkfs.ext4 ${loop_device}p2

在大多数快乐和不快乐的路径中,循环设备将通过 bash 调用来清理losetup。但也有一些不愉快的路径2导致循环设备被抛在后面。

如果这是有关挂载的问题,那么简单的解决方案是在挂载名称空间中运行unshare -m. 这将导致内核在进程退出时清理挂载点,而进程不会显式执行相同的操作。

此外,如果循环设备首先是通过挂载创建的,那么mount -o loop当挂载点存在时,循环设备将被清理,因此通过代理,挂载命名空间也可以用于清理循环设备。

但由于我所追求的是全为零的文件上的 GPT 分区表,因此没有文件系统可以成功安装在其上(据我所知)。

那么,当进程、进程组、命名空间等被清理时,是否有其他方法可以让内核清理循环设备?


  • 1 我知道存在解决方案,例如格式化单独的文件,然后使用dd偏移量进行复制,但这会导致将多个 GB 的零写入磁盘,而不是保留为稀疏文件。所以这里“稀疏”二字很重要
  • 2 一个明显的例子是当 bash 被杀死时会发生什么kill -9
linux
  • 1 个回答
  • 341 Views
Martin Hope
Philip Couling
Asked: 2023-06-22 06:46:20 +0800 CST

我必须如何配置 Debian 或 Ubuntu 以确保存在从 TPM 到登录的信任链?

  • 7

TPM 应该解决先有鸡还是先有蛋的问题,即在哪里存储未加密的磁盘加密密钥,这样人们就不能简单地在机器中插入另一个硬盘驱动器、启动不同的操作系统并直接从磁盘/闪存/BIOS/读取密钥...

据我所知,TPM 基本上是通过检查启动的软件来实现这一点的,如果该软件与预设的哈希值不匹配,它将保持锁定状态并拒绝给出磁盘加密密钥。

我读过很多文章,指出 systemd 可以使用systemd-cryptenroll帮助将我的 LUKS 密钥嵌入到 TPM 中。但这些只是谈到将密钥嵌入到 TPM 中,并没有阻止攻击者读取这些密钥。

我陷入困境的是弄清楚如何确保从 BIOS 固件到登录存在可靠的信任链,确保如果操作系统被篡改,它将无法启动,或者 TPM 将拒绝移交加密密钥。

例如,如果终端上的某人只需按Egrub 提示符并启动 linuxinit=/bin/bash即可为自己提供 root 登录而无需密码,那么加密我的硬盘驱动器就没有多大用处。在这种情况下,加密就完全没有意义了。

我坚持两个相当具体的点:

  • 典型的基于 systemd 的发行版(Debian 或 Ubuntu)首先如何锁定 TPM。这可以保护哪些文件不被篡改?
  • 我必须加强启动顺序中的哪些其他内容以防止篡改?
    • 例如:grub EFI 二进制文件、EFI 中的 grub.cfg、编辑启动项的 grub 密码、initramfs、...
linux
  • 1 个回答
  • 44 Views
Martin Hope
Philip Couling
Asked: 2023-04-16 17:40:04 +0800 CST

/etc/mtab 的使用现在是否应该被视为弃用?

  • 12

我对 file 或 symlink 很好奇/etc/mtab。我相信这是一个遗留机制。在我使用过的每个现代 linux 上,这是一个符号链接/proc/mounts,如果mtab要成为“普通”文件系统上的常规文件,/etc那么让软件与挂载命名空间一起工作将面临挑战。

很长一段时间以来,我一直认为两件事中的一件是真的。任何一个:

  • 我们正在等待参考软件/etc/mtab过时或更新
  • 其他非 Linux 操作系统仍然使用相同的文件名,并且链接存在于跨平台合规性

然而,这两个想法似乎都不靠谱。我找不到对在 Linux 之外保持相同文件名的任何现代操作系统的良好参考。而且它似乎已经存在了太久,而不仅仅是一个向后兼容性问题;更重要的变化似乎在同一时间来来去去。

所以我想知道是否/etc/mtab真的只是出于历史原因。它是否以任何方式正式弃用?[截至 2023 年]是否有任何确凿的现代理由来保留它?

我不想从我的系统中删除它,但作为一名软件开发人员,我想了解它的用处以及是否要避免它。

linux
  • 2 个回答
  • 939 Views
Martin Hope
Philip Couling
Asked: 2022-05-27 06:28:10 +0800 CST

deb 文件或 apt 中的依赖项要求末尾的波浪号 (~) 是什么意思?

  • 10

我很想知道~Apt 在依赖项中是如何处理的,或者它是如何为 deb 文件定义的(我不确定语法的确切定义位置)。

我遇到了关于python3具有依赖约束的 Ubuntu (Focal) 元包的依赖关系:(python3.8 >= 3.8.2-1~见这里)。

我相信包版本的定义是为了让它们按词法排序,但是当我检查 ubuntu 焦点时,没有python3.8按词法排序的版本,>= 3.8.2-1~但是有一个版本3.8.10-0ubuntu1~20.04.4推断 Ubuntu Focal 的依赖项被破坏(它们不是)或者有依赖中的一些特殊含义~。

我能找到的关于该主题的唯一文档是 Debian 的Declaring Relations between packages。但这并没有提到 a ~or 模式匹配。

那么~.deb 依赖项中的尾随是什么意思?

dpkg apt
  • 2 个回答
  • 1072 Views
Martin Hope
Philip Couling
Asked: 2022-04-08 01:54:35 +0800 CST

将换行符写入 sysctl (/proc/sys) 文件是否有任何影响?

  • 2

今天我遇到了一些将换行符显式写入 sysctl 文件的代码。请参阅 moby/docker源代码。我的第一个想法是,尽管换行符是多余的,但作者还是努力将 shell 的行为复制到 go 中。

但后来我开始寻找有关该主题的文档,发现无论哪种方式都很难找到信息。到目前为止,我还没有想出任何东西。


在编写 sysctl 文件时,/proc/sys/许多值都是用 ASCII 编写的整数。例如,要打开或关闭某些东西,您必须将文本写入文件1或0将其作为文本写入文件。

通常,关于 U&L 和博客等的建议是在 shell 中使用echo. 例如开启 IPv4 转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

但这个建议与其既定目标略有不同。它不会将单个字节 0x31 写入文件。它写入两个: 0x31 0x0A 也称为1\n. 我一直认为换行符(0x0A)只是被内核忽略了。


将换行符写入 sysctl 文件(例如/proc/sys/net/ipv4/ip_forward)是否有任何影响? 欢迎参考,即使它们是指向源代码的链接。

linux kernel
  • 1 个回答
  • 82 Views
Martin Hope
Philip Couling
Asked: 2021-11-24 14:11:20 +0800 CST

内核如何在磁盘缓存和交换之间做出决定?

  • 3

继其他问题中提出的主题之后,我相信当 Linux 内核试图释放物理 RAM 时,它会在从磁盘缓存中丢弃页面或将其他页面刷新到交换中做出某种决定。 我不确定这一点,也许我完全误解了机制。

无论如何,两者之间存在协同作用:

  • 内核保持它自己的内部磁盘缓存
  • 程序内存映射文件
  • “常规”应用程序内存被放置在交换文件中

这三个都可以用来释放物理 RAM,这三个都依赖于将“脏”页面写入磁盘,或者只是知道这些页面已经在磁盘上完全复制并从物理 RAM 分配中丢弃它们。


使用交换空间,可以为各个交换分区和文件赋予优先级,以便在使用较慢设备之前使用较快的设备。我不知道其他非交换设备的任何此类配置。

我的问题是:内核如何决定要释放哪些 RAM?

  • 它纯粹基于最后一次访问吗?
  • 内核是否平等地使用上述所有三个?
    • 它们(和单个磁盘)之间是否有任何优先级
    • 它是可配置的吗?

这个问题由与此类似的经验驱动,但我希望这个问题关注底层机制而不是解决特定问题。

linux memory
  • 1 个回答
  • 428 Views
Martin Hope
Philip Couling
Asked: 2021-10-01 03:12:06 +0800 CST

docker容器是否为从同一层映射但不同图像的文件内存共享RAM?

  • 1

我不能 100% 确定这是 U&L 问题还是SO问题。总的来说,我将它发布在 U&L 上,因为它与操作系统相关。

背景

据我所知,Linux 将通过将共享库(.so 文件)映射为写时复制来加载共享库(.so 文件)。这样做的一个优点是,共享同一个大型库的多个进程都将共享相同的物理 RAM,用于该库的大部分内容。

Docker 不一定会发生这种情况,因为进程在基于“映像”的自己的“容器”中运行,并且每个映像都包含它自己的共享库副本。这是故意的。它允许程序附带它们自己的依赖项(库),这些依赖项可能与系统上已安装的库有很大不同。

因此,在 docker 主机上本地运行的程序不会与在 docker 容器中运行的程序共享相同的库内存,因为 docker 容器中的程序已映射到库的不同副本。

Docker 层解释

Docker 镜像是分层创建的。每一层都添加到较低的一层,有时会覆盖现有文件。并非每个文件都在每一层中更改。

Docker 允许您通过向旧图像添加新层来创建新图像。发生这种情况时,您最终会得到多个共享相同图层的图像。这些图像共享一些相同文件的相同副本。

Docker 将这些层分开保存,至少在运行时之前是这样。例如:从 Docker Hub 拉取图像,Docker 通过获取每个图像的组成层来获取图像。它只获取它还没有的层。

我不知道的

在创建或运行容器时,Docker 必须将这些层组装成一个单一的连贯文件系统。我不知道它是怎么做到的。它可能:

  • 将文件复制到一个地方
  • 在一处创建硬链接
  • 使用覆盖文件系统

根据它的作用,源自同一层的文件可能是相同的副本,或者它们可能是文件系统上的完全相同的文件。

这最终会影响文件被多个进程映射到内存时发生的情况。

我真正想发现什么?

我想知道从两个不同的图像运行两个容器是否会为源自单个层的单个共享库共享相同的 RAM。

docker mmap
  • 1 个回答
  • 736 Views
Martin Hope
Philip Couling
Asked: 2019-12-10 17:13:11 +0800 CST

什么具体可以交换 RAM 不能做的?

  • 44

当 Linux 有交换而没有交换时它可以做什么?

对于这个问题,我想关注例如具有 32 GB RAM 且没有交换的 Linux PC 与具有 16 GB RAM 和 16 GB 交换的几乎相同的 Linux PC 之间的区别。请注意,我对“是的,但是如果将交换添加到 32 GB PC 可以看到 X 改进”不感兴趣。这是这个问题的题外话。


我第一次遇到这样的观点,即添加交换比在早期问题的注释中添加 RAM 更好。

我当然读过这个:如果我有足够多的 RAM,我需要交换空间吗?和...

  • 答案主要集中在添加交换上,例如讨论磁盘缓存,其中添加 RAM 当然也会扩展磁盘缓存。
  • 有人提到只能通过交换进行碎片整理,但我找不到支持这一点的证据。
  • 我看到一些对 MAP_NORESERVE 的引用mmap,但这似乎是一个非常具体且晦涩的风险,仅与OOM情况相关,并且可能仅与私有mmap 相关。

交换通常被视为扩展内存或提高性能的一种廉价方式。但是,当大规模生产嵌入式 Linux 设备时,情况就发生了翻天覆地的变化……

...在这种情况下,交换会磨损闪存,导致它在保修期结束前几年失效。将 RAM 翻倍是在设备上多花几美元。

请注意,这是 eMMC 闪存而不是 SSD!. 通常 eMMC 闪存没有磨损均衡技术,这意味着它的磨损速度比 SSD 快得多


在这件事上似乎有很多激烈的争论。我真的在寻找关于能力的枯燥事实,而不是“你应该/不应该”的意见。

通过添加 RAM 也无法完成的交换可以做什么?

linux swap
  • 14 个回答
  • 11820 Views
Martin Hope
Philip Couling
Asked: 2019-11-27 07:15:12 +0800 CST

jenkins chroot 环境中的“unshare --mount”

  • 2

在我的一些构建脚本中,我一直使用挂载命名空间作为安全挂载的机制,而不会在脚本终止时留下这些挂载。 当该命名空间中的最后一个进程退出时,未共享的挂载点将被隐式卸载。

我的脚本通常包括这样的 stansa:

#!/bin/bash
self_ns=$(ls -lh /proc/self/ns/mnt)
init_ns=$(ls -lh /proc/$PPID/ns/mnt)
if [ "${self_ns#*mnt:}" = "${init_ns#*mnt:}" ] ; then
    unshare --mount $0 "$@"
    exit $?
fi

虽然这对我来说已经有一段时间了,但我最近在 jenkins 构建服务器上遇到了问题。

我认为问题在于构建脚本本身正在jenkins chroot 环境中执行。因此,当脚本执行时unshare --mount ...,它会失败并出现错误:

unshare: cannot change root filesystem propagation: Invalid argument

不幸的是,我真的不明白这个限制或如何绕过它。当我在命令行上尝试 chroot 时,我无法复制此错误。我不知道詹金斯插件做了什么导致这种情况。

最重要的是,这些挂载点在每次退出时都会被删除,不会失败。

linux mount
  • 2 个回答
  • 859 Views
Martin Hope
Philip Couling
Asked: 2019-11-20 06:43:22 +0800 CST

如何确定与网络上的 IP 关联的主机名?

  • 13

如何确定与网络上的 IP 关联的主机名?(不配置反向 DNS)

这是我认为不可能的事情。但是我一直在我的手机上使用Fing 。它能够找到我网络上的每个设备(可能使用 arp-scan)并用主机名列出它们。

例如,这个应用程序能够找到插入家庭路由器的新安装的 Debian Linux 设备,而没有明显的反向 DNS。

据我所知, ping、Neighbor Discovery和arp都不包含主机名。那么,如何为新安装的 Linux PC 获得此功能呢?Linux 机器上还有什么其他协议会给出机器配置的主机名?

networking
  • 2 个回答
  • 1964 Views
Martin Hope
Philip Couling
Asked: 2019-10-29 08:27:34 +0800 CST

Linux 如何使用实时时钟?

  • 9

我正在研究一些Beagle Bone Black (BBB)板上的一种非常奇怪的效果。我们看到系统时钟偶尔会出现几个月的跳跃,这总是与systemd-timesyncd更新系统时钟相关。我们每周会在不同地点的 2000 台设备中看到其中的 2 到 3 台。

我们花了很多时间检查 SNTP,但它似乎表现正常。

我们终于想出了一个板载实时时钟的硬件问题,它可能会由于电子噪声而导致它随机跳跃 131072 秒(36 小时)。这并不立即正确,报告的时间跳跃非常具体,比我们观察到的要少得多,但是对这个问题的深入阅读表明跳跃可能更加随机,甚至可能倒退。

我的问题是...... linux如何使用实时时钟来维护系统时钟?

我想知道实时时钟的错误是否只会在时间同步代理(ntpd 或 systemd-timesyncd)更新时出现在系统时钟中。系统时钟和 RTC 之间是否有任何直接联系,还是仅由代理使用?


注意:在第一段中,我提到我们看到系统时钟出现几个月的跳跃,这总是与systemd-timesyncd更新系统时钟相关。我的意思是时间跳转后的第一条系统日志消息是Time has been changed系统日志消息:

grep 'Time has been changed' /var/log/syslog
Oct  2 23:53:33 hostname systemd[1]: Time has been changed
Nov 21 00:07:05 hostname systemd[1]: Time has been changed
Nov 21 00:05:17 hostname systemd[1]: Time has been changed
Nov 21 00:03:29 hostname systemd[1]: Time has been changed
Nov 21 00:01:43 hostname systemd[1]: Time has been changed
Oct  3 02:07:20 hostname systemd[1]: Time has been changed
Oct  3 06:37:04 hostname systemd[1]: Time has been changed

据我所知,唯一发出这些消息的是 systemd-timesycnd (参见源代码)。显然,如果其他人知道systemd与这些匹配的其他常规系统日志消息,我愿意接受建议。

linux
  • 2 个回答
  • 2536 Views
Martin Hope
Philip Couling
Asked: 2019-10-06 08:17:29 +0800 CST

分离的 LUKS 标头的限制是什么

  • 1

我试图了解 LUKS 分离标头与其各自的块设备之间的关系。据我了解,使用分离的标头“格式化”实际上并没有改变其各自块设备的内容,这只发生在您开始写入打开的 ( cryptsetup luksOpen) 分区时。

所以我想知道:

  • 单个加密分区是否可以有两个独立的标头。例如,如果我有一个可移动驱动器间歇性地插入两台不同的计算机,每台计算机是否可以拥有自己独立的标头副本,而无需重新同步标头的两个副本。
  • 可以将单个分离的标头用于两个单独的驱动器。例如,如果我有两个加密的备份驱动器,是否可以将单个标头用于两者,或者标头是否以某种方式绑定到分区?
luks
  • 1 个回答
  • 1683 Views
Martin Hope
Philip Couling
Asked: 2019-06-28 04:09:55 +0800 CST

当您可以移动他们的文件时,为什么不能移动其他用户的目录?

  • 7

继另一个用户的问题之后,我遇到了一个我无法轻易合理化的 Linux 文件系统权限的怪癖:

sudo mkdir ~/foo ~/foo/bar
sudo touch ~/baz
mkdir ~/my_dir
chown 700 ~/my_dir
# this is fine
mv ~/baz ~/my_dir
# renaming is fine
mv ~/foo ~/bob
# Moving caused: Permission denied
mv ~/bob ~/my_dir/

为清楚起见foo foo/bar baz,归根所有。 my_dir归我自己的用户所有,当然~也归我自己的用户所有。我可以重命名和移动另一个用户拥有的文件。我可以重命名另一个用户拥有的目录,但我不能移动另一个用户拥有的目录。

这似乎是一个非常具体的限制,我不明白正在保护什么危险或什么潜在的机制意味着它只能以这种方式工作。

为什么其他用户的目录不能移动?

linux permissions
  • 1 个回答
  • 1221 Views
Martin Hope
Philip Couling
Asked: 2019-05-08 05:32:43 +0800 CST

用户指定的 crontab 是否有 systemd 替代方案?

  • 2

我注意到在 Debian 相关系统上,系统级 crontab 脚本/etc/cron.hourly,/etc/cron.daily... 正在逐渐退役,取而代之的是 systemd 计时器。例如:

$ cat logrotate
#!/bin/sh

# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
    exit 0
fi

...

我认为一个目标是逐步停用 cron 和 anacron。(见注1)

对我来说,cron 的一个关键用例是用户定义的 crontabs ( crontab -e),它允许用户安排自己的作业以自己的用户身份运行,而无需系统管理员权限。

systemd,当前或计划中是否有任何功能允许非管理员用户安排重复性任务?


注1:

稍微弱化之前的声明,除了那些说 cron 的坏话和对 systemd 计时器的赞美之外,我没有发现任何特别好的讨论。我没有发现任何证据表明这个方向是由 Linux 发行版之神传授的。但是我确实注意到它是一个旅行方向。因此,此声明仅基于这样的想法,即如果这是一个行进方向并且随着时间的推移,我希望大多数/所有包最终都会以相同的方式进行,并使一个系统(cron)冗余。

systemd cron
  • 1 个回答
  • 1165 Views
Martin Hope
Philip Couling
Asked: 2019-04-27 01:42:39 +0800 CST

长链的 iptables 性能

  • 0

我想知道 iptables 中的长链是否可能导致性能问题。在这里,一个长链可能是超过 2,500 个单独的 IP 禁令。

我担心的是,我对 iptables 的有限了解表明这将导致服务器收到的每个数据包都检查 2,500 条规则。


我的用例是这样的:

我正在使用 iptables 来阻止 IP 以不应该的方式反复戳我的服务器(例如,重复的 SSH 登录失败)。我正在使用类似于fail2ban的 python 脚本。

最近,通过减慢攻击速度,这些“攻击”开始变得更加聪明。 我怀疑他们已经将 IP/用户名的嵌套循环反转为用户名/IP。因此,为了解决这个问题,我不得不大幅延长禁令时间。我对此持非常强硬的态度,所以如果他们在两个月的试用期内再次尝试,我的新禁令时间是 1 年或两倍。

我发现此类禁令导致大约 2,500 条禁令的轶事证据。如果我以目前新禁令的比率计算,它会更像是 8,000,但我希望随着服务器开始更准确地阻止恶意流量,这个比率会减慢。

linux iptables
  • 1 个回答
  • 530 Views
Martin Hope
Philip Couling
Asked: 2019-02-09 06:28:24 +0800 CST

如何仅将交换空间用于紧急情况?

  • 53

我有一台8 GB RAM 和 16 GB 交换的 Debian (Buster) 笔记本电脑。我正在运行一个很长的运行任务。这意味着我的笔记本电脑在过去六天里一直处于开机状态。

这样做时,我需要定期将笔记本电脑用作笔记本电脑。这应该不是问题;长时间运行的任务受 I/O 限制,通过 USB 硬盘上的东西工作,并且不需要太多 RAM (<200 MB) 或 CPU (<4%)。

问题是当我几个小时后回到我的笔记本电脑时,它会非常缓慢,可能需要 30 分钟才能恢复正常。这太糟糕了,以至于崩溃监视器将它们各自的应用程序标记为已冻结(尤其是浏览器窗口)并且事情开始错误地崩溃。

查看系统监视器,大约一半使用的 2.5 GB 被转移到交换中。我已通过删除交换空间 ( swapoff /dev/sda8) 确认这是问题所在。如果我离开它而没有交换空间,即使在 24 小时后它也几乎立即恢复了生机。使用交换,前五分钟几乎是一块砖,只剩下六个小时。我已经确认即使我不在,内存使用量也不会超过3 GB 。

我尝试将交换性(另见:Wikipedia)减少到and的值,10但0问题仍然存在。似乎在一天不活动之后,内核认为不再需要整个 GUI 并将其从 RAM 中擦除(将其交换到磁盘)。长期运行的任务是读取庞大的文件树并读取每个文件。所以可能是内核被混淆了,认为缓存会有所帮助。但是在一次扫描具有约 10 亿个文件名的 2 TB USB HD 时,额外的 GB RAM 对性能没有太大帮助。这是一款便宜的笔记本电脑,但硬盘驱动器很慢。它根本无法足够快地将数据加载回 RAM。

如何告诉 Linux 只在紧急情况下使用交换空间?我不想在没有交换的情况下运行。如果发生意外情况,并且操作系统突然需要额外的几 GB,那么我不希望任务被杀死,而是更愿意开始使用交换。但目前,如果我启用交换,我的笔记本电脑将无法在需要时使用。

“紧急情况”的准确定义可能有待商榷。但是要澄清我的意思:紧急情况是系统除了交换或终止进程之外别无选择。


什么是紧急情况?-你真的要问吗?......我希望你永远不会发现自己在燃烧的建筑物中!

我不可能在这个问题中定义所有可能构成紧急情况的东西。但是例如,紧急情况可能是当内核被推送内存以致它开始使用OOM Killer杀死进程时。紧急情况不是内核认为它可以通过使用交换来提高性能。


最终编辑: 我已经接受了一个答案,它完全符合我在操作系统级别的要求。未来的读者还应该注意提供应用级解决方案的答案。

linux memory
  • 6 个回答
  • 7113 Views
Martin Hope
Philip Couling
Asked: 2019-02-04 13:55:53 +0800 CST

ls -i 中的 inode 编号如何与磁盘上的 inode 相关

  • 2

我试图了解 inode 编号(由 显示ls -i)如何与 ext4 分区一起使用。

我试图了解它们是否是 linux 内核的构造并映射到磁盘上的 inode,或者它们是否实际上是存储在磁盘上的相同数字。

问题:

  1. 重新启动计算机时,inode 编号是否会更改?
  2. ls -i挂载两个分区时,只要两个不同的文件在不同的分区上,就可以为它们生成相同的 inode 号。
  3. 可以在不重新启动或重新挂载分区的情况下回收 inode 编号吗?

为什么我要问...

我想在具有 1.5TB 数据和大约 2000 万个文件(文件名)的 USB 硬盘上创建二级索引。文件范围从 10s 字节到 100s GB。其中许多是多次硬链接,因此单个文件(磁盘上的 blob)可能有多达 200 个文件名。

我的任务是通过检测重复并用更多的硬链接替换重复来节省磁盘空间。

现在作为一个单独的练习,我想我可以为磁盘上的每个文件创建一个数据库,它是 shasum、权限等......一旦建立,检测重复应该是微不足道的。位我需要确定我使用的是正确的唯一键。由于存在大量硬链接,文件名不合适。我希望我可以使用 inode 编号。

我想了解的是,当我下次重新启动机器时,我们的 inode 编号是否会改变。或者如果它们更加不稳定(在我构建数据库时它们会改变吗?)

我阅读的所有文档都模糊了内核提供的 inode 编号和磁盘上的 inode 之间的区别。根据我已经阅读过的文章,这些是否相同尚不清楚。

linux filesystems
  • 2 个回答
  • 1839 Views
Martin Hope
Philip Couling
Asked: 2018-06-06 02:13:03 +0800 CST

推荐和建议如何与 apt-get dist-upgrade 和 apt-get autoremove 交互?

  • 6

我试图弄清楚 Debian 软件包之间的“建议”和“推荐”关系。我知道他们为用户提供了更多关于安装什么和不安装什么的选择。

但我只知道manual和auto标记来指示安装包的原因。这不包含足够的信息来跟踪用户决定是否安装建议和推荐的软件包。我在文档中看不到 apt 的行为(包 X 建议 Y 并建议 Z):

apt-get dist-upgrade将 X 升级到不再推荐 Y 或 Z 的更新版本。

apt-get dist-upgrade将 X 升级到更新的版本,该版本推荐并建议新的软件包(尚未安装)。

apt-get autoremove删除包 X。


apt
  • 1 个回答
  • 1284 Views
Martin Hope
Philip Couling
Asked: 2018-02-15 03:54:52 +0800 CST

如何将多个磁盘之一挂载到 fstab 中的特定位置

  • 3

我有少量可移动硬盘。在任何时候,/backup除了更换驱动器时,它们中的一个都将被安装。我定期更换驱动器。那就是我有 4 个硬盘驱动器,我旋转它们。

目前我手动安装/卸载驱动器。但是有时这台机器会关闭,更糟糕的是,有时它会在我不知情的情况下关闭。如果未安装驱动器,每日备份脚本将失败。

驱动器当前不共享 UUID 或标签。我无法保证该磁盘将始终在/dev/sdb1. 当我只是不知道要插入哪个驱动器时,有没有一种好方法可以从 /etc/fstab 自动挂载多个驱动器中的一个?


请注意,这是一个没有显示器或键盘的 linux (debian) 系统。插入后/拔出之前,驱动器当前是通过 ssh 手动安装/卸载的。

linux mount
  • 2 个回答
  • 2068 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve