TL;DR为什么 journald 存储大约 770 MiB 而显示日志只产生 90MiB 的数据?
#UPDATE#
我做了一个journalctl -a -o verbose至少产生了大约 530MiB,但少于日志在磁盘上使用的 770MiB。无论如何,我希望磁盘上的日志以某种方式压缩,并且应该小于 530MiB 而不是更大。到底是怎么回事?
#更新2#
似乎journald有一种趋势,即创建大部分为空的日志文件。
$> cat .system@0000.journal~ | wc -c
8388608
#> cat .system@0000.journal~ | sed 's/\x00//g' | wc -c
47181
Run Code Online (Sandbox Code Playgroud)
这可能是@Mioriin 的评论所暗示的。有什么理由为什么有 8MiB ,但 journald 保存的日志文件几乎是空的?
长版有背景
我的系统非常健谈,带有 linux 内核 dmesg 输出、gnome DE 等 -/var/log通过journald我遗憾地使用的系统记录器填充我的目录(仍在标准 systemd arch linux 上)。
我查看了一下du -hs /var/log,发现大约 2GiB,其中大部分是journald期刊。我删除了超过 90 天的数据journalctl --vacuum-time=90d,唉,牺牲了超过 3 个月的journald …
有关Systemd 的 Inhibitor Locks和man systemd-inhibit 的文档用大量篇幅解释了如何在阻止某些内容(例如事件handle-lid-switch)时以某种方式启动进程。
我无法找到一种方法来允许我删除这样的“锁定”/“禁止”/“阻止”。
问题:有没有办法解除systemd-inhibit锁定,例如通过dbus消息?
背景:我需要什么来移除抑制器锁**
我的笔记本电脑有一个笔记本电脑盖关闭开关,用于systemd-logind监视并在盖关闭时暂停笔记本电脑 - 功能“ close-lid -> suspend”。
一旦笔记本电脑被放置在其扩展坞中,为了让用户能够使用更大的屏幕,Gnome 的 gsd-power 会任意(并且 错误地并且在 Gnome 中没有任何可用设置来更改它)决定创建一个禁止锁,从而阻止功能“ close-lid -> suspend”工作。
知道如何删除抑制锁,将使我能够纠正 Gnome 的 gnome-setting-deamon power 所做的错误设置gsd-power。Gnome的设置是错误的,因为手动调用挂起systemctl suspend确实没有问题。
我想删除的抑制剂锁,如下所列systemd-inhibit --list:
Who: alex (UID 1000/alex, PID 4248/gsd-power)
What: handle-lid-switch
Why: Multiple displays attached
Mode: block
Run Code Online (Sandbox Code Playgroud) strace在bash被指示运行的shell 上运行mkdir提供了此输出,该输出显示了执行实际mkdir二进制文件之前的大量统计信息:
BASH$> strace -f sh -c "bash -c \"mkdir /tmp\" 2>&1 | nl | grep -e "execve\|stat\|access"
[.....]
2766 [pid 17371] stat(".", {st_mode=S_IFDIR|0750, st_size=17262, ...}) = 0
2767 [pid 17371] stat("/usr/local/sbin/mkdir", 0x7ffd87aad0a0) = -1 ENOENT 2767 (No such file or directory)
2768 [pid 17371] stat("/usr/local/bin/mkdir", 0x7ffd87aad0a0) = -1 ENOENT (No such file or directory)
2769 [pid 17371] stat("/usr/bin/mkdir", {st_mode=S_IFREG|0755, st_size=51136, ...}) = 0
2770 [pid 17371] stat("/usr/bin/mkdir", {st_mode=S_IFREG|0755, st_size=51136, ...}) = 0 …Run Code Online (Sandbox Code Playgroud) 如果/home/user/me在ext4fs的元数据中出现硬盘坏扇区,是否意味着所有子目录的数据丢失?
背景:
我知道许多用户对 ext4 文件系统感到满意,甚至不愿意更改为“最近”开发的替代方案(例如 BTRFS),声称数据丢失的风险增加。事实上,当关于 ext4 的代码在今天出现时,一些发现错误的结果会说话。
有了这个介绍,我的问题是:
ext4文件系统对来自块设备的坏扇区的抵抗力是多少。一个坏扇区可能会吞下 4K 字节,我想如果那些 4K 碰巧吞下了目录结构(即/home/user/me目录)中的一些目录信息,那么我认为这会“造成严重破坏” 。
我知道超级块(更基本的信息源在 ext4 中以冗余形式保存,所以我对坏块进行成像可以在那里修复,但我不确定它是否会被自动删除)
所以我的问题是:ext4 能否阻止在其元数据中丢失坏块?
我知道数据/文件内容中的坏块总是意味着丢失那些 512/4K 扇区(但是我在那里使用 parchive 作为补救措施)。
是否有不需要 D-Bus 的桌面环境(即类似于 Gnome、KDE、Xfce 等)?
最佳答案最好给出一个包含列表,或者确认当今的桌面环境必然依赖于 D-Bus(可能给出一个原因?)
根据这篇LWN 文章, kdbus 应该取代 D-Bus。这可以以某种方式确认吗?
我想知道这毕竟是一项简单的任务,就像我想象的那样,两者都有不同的 API?据我所知,有必要重做一些工作/更新以将程序从使用 D-Bus 转移到 kdbus?因此,如果正如 LWN 文章中提到的那样,目标是替换 D-Bus,那么我认为它会导致一些更新工作,对吗?
或者也许会在一段时间内两个系统并行工作?
在使用 lightdm 进行图形登录时,我可以设置要启动的会话类型并提供:
第一个Gnome是运行标准 Wayland 后端的 Gnome DE,据我所知,这意味着 Gnome 充当 Wayland 协议合成器,即与 KMS 和 evdev 的内核对话(如Wayland Architecture | freedesktop.org 所示),第二个选择Gnome on Xorg时,选项也会创建一个 Gnome 会话,但有一个进程Xorg,即我可以告诉 Xorg 服务器正在运行。
我很好奇,因为如果可以同时运行两个 Xorg-Server,作为 Wayland 协议的合成器,它们可能会使用相似/相同的资源(即图形适配器)。
因此,我测试了登录,一次进入 Gnome wayland 会话,然后使用另一个帐户帐户登录到 Xorg 会话中的 Gnome。结果是这看似有效,但有名为/usr/bin/Xwaylandrunning 的进程,我不确定显示的 Xorg 会话最终是否只是“假的”,因此通过 XWayland“Xorg”服务器显示。
我很困惑,我想在这里提出一个问题,“Xorg-Server 和 Wayland-Compositor [可以] 在 Linux 中同时运行吗?”
就像在以下问题中讨论的那样:
grep 可能会停止处理它认为是二进制的文件。
虽然这通常不是什么大问题,但在搜索文本文件时,结果证明有时某些文本文件是“脏的”,即包含一些二进制数据。
我提出这个问题的具体情况是,某种二进制数据(对于 grep 认为是二进制的,请参阅引用的问题)以某种方式进入了.bash_history文件,我想将其删除。
如何从文本文件中删除二进制数据?
不仅仅是删除二进制数据,我希望能够查看有问题的(grep)二进制数据是什么,以避免删除需要/重要的东西。
出于这个问题的目的,让我们假设文件/path/to/file系统中有一个文件 ( ) 具有如下特定内容:
$> cat /path/to/file
this is the content of the
file /path/to/file
Run Code Online (Sandbox Code Playgroud)
我对几乎所有正在运行的进程(并具有读取此文件的权限)、读取此内容感到满意。
但是(这是问题的核心)应该有一个特定的过程,在读取时/path/to/file应该提供不同的文件内容。
$> cat /path/to/file
this is the DIFFERNT content of the
file /path/to/file
Run Code Online (Sandbox Code Playgroud)
如何以某种方式欺骗特定进程的文件内容?
我的一些猜测,走哪条路将是与以下相关的孤独:
chroot 诡计$LD_PRELOAD 勾搭技巧我的平台是 GNU/linux,但如果有一种 POSIX 方式来实现它会更好:)
更新
什么是好的解决方案/答案?
一个好的解决方案/答案的标准是可以实现“特定进程的不同文件内容”,而无需 root 用户的交互,即使理想情况下,欺骗文件首先不应该是用户可写的。
另一个好的标准是,显示给进程的文件进程的修改是特定的,理想情况下没有竞争条件。
Mozilla firefox 使用 2 个 zip 存档/usr/lib/firefox/omni.ja和/usr/lib/firefox/browser/omni.ja,其中包含相当多的 firefox 代码(主要是用 Javascript 编写的内容),通过欺骗文件,我将能够修改我的 firefox 版本(包括一些我无法再实现的功能)扩展,提供放弃 XPCOM 支持和不喜欢插件签名强制)
exec echo "some "; echo "test"在 bash 中运行永远不会打印“一些测试”吗?
我会寻求对这个问题的确认,因为我正在编写一个小的 shell 脚本,并且我希望它exec在调用命令后不要继续执行任何操作。
我认为我不需要担心,根据我的理解,经过咨询:
man 3 exec man 1p exec shell 脚本,当由 shell 执行时,会生成
exec,其中exec***家族系统调用来替换正在执行脚本的 shell/bash,这会阻止shell 的进一步操作(已被“替换”)如前所述,这个问题的主要目标是为我的推理寻求确认,以防止在执行 exec (例如echo test)之后脚本中发生任何事情。
我希望尽可能提供一般性答案(POSIX),但以防万一,我对 GNU/Linux 和 GNU/Bash 最感兴趣