为什么通过“lsblk -all”看不到 RAMdisk?

为什么通过“lsblk -all”看不到 RAMdisk?

为什么通过“lsblk -all”看不到 RAMdisk?

手册上说:

man lsblk
-a, --all
Disable all built-in filters and
list all empty devices and
RAM disk devices too.

使用
neofetch --stdout | grep 'OS:'
结果:
操作系统:Kubuntu 22.10 x86_64

还有其他人遇到同样的问题吗?

df          # shows ramdisk 
lsblk -all  # does not show ramdisk 

背景1:
dpkg -l |grep 'util-linux' |awk '{print $3}'
2.38-4ubuntu1

背景 2:
lsblk --version
来自 util-linux 2.38 的 lsblk

背景 3:
使用 3 个命令制作了 25GB 的 ramdisk1:

sudo mkdir     /mnt/ramdisk1
sudo chmod 777 /mnt/ramdisk1
sudo mount -t tmpfs -o rw,size=25G tmpfs /mnt/ramdisk1

背景 4 :
在 ramdisk1 上创建了 2 个文件,大小分别为 22GB 和 1GB

time sudo dd if=/dev/zero of=/mnt/ramdisk1/zero22G bs=1M count=22000
time sudo dd if=/dev/zero of=/mnt/ramdisk1/zero01G bs=1M count=1000

背景 5 :
确认 ramdisk1

df     |grep -i 'blocks\|ramdisk'

Filesystem      1K-blocks      Used Available Use% Mounted on
tmpfs            26214400  23552000   2662400  90% /mnt/ramdisk1

背景 6 :
确认 ramdisk1 使用 GB

df -BG |grep --color=always -i 'sd\|nv\|blocks\|ram'

Filesystem     1G-blocks  Used Available Use% Mounted on
tmpfs                25G   23G        3G  90% /mnt/ramdisk1
...

背景7:

lsblk -all

不显示 ramdisk。

NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0       7:0    0     4K  1 loop /snap/bare/5
loop1       7:1    0  63.2M  1 loop /snap/core20/1623
loop2       7:2    0 238.5M  1 loop /snap/firefox/1969
loop3       7:3    0 346.3M  1 loop /snap/gnome-3-38-2004/119
loop4       7:4    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop5       7:5    0    48M  1 loop /snap/snapd/17336
loop6       7:6    0     0B  0 loop
loop7       7:7    0     0B  0 loop
sda         8:0    0 119.2G  0 disk
sda1        8:1    0   512M  0 part
sda2        8:2    0 118.7G  0 part /var/snap/firefox/common/host-hunspell
                                    /
sdb         8:16   0   1.4T  0 disk
sdb1        8:17   0   1.4T  0 part /media/x/s1397GB
sdc         8:32   0   1.8T  0 disk
sdd         8:48   1  28.9G  0 disk
sdd1        8:49   1     4G  0 part
sdd2        8:50   1   4.2M  0 part
sdd3        8:51   1   300K  0 part
sdd4        8:52   1  24.9G  0 part /media/x/writable
sde         8:64   1  29.2G  0 disk
sde1        8:65   1  29.2G  0 part /media/x/x_FAT_32
nvme0n1   259:0    0 465.8G  0 disk
nvme0n1p1 259:1    0   512M  0 part /boot/efi
nvme0n1p2 259:2    0 465.3G  0 part

df          # shows ramdisk
lsblk -all  # does not show ramdisk

为什么通过“lsblk -all”看不到 RAMdisk?

--

答案1

边注

您的lsblk -all相当于lsblk -a -l -l即到lsblk --all --list --list,而不是到唯一的lsblk --all


简短回答

为什么无法通过 RAMdisk 看到它lsblk -all

lsblk列出块设备。您的“RAMdisk”tmpfs才不是使用任意块设备。


解释与研究

mount -t tmpfs …创建并挂载存在于 RAM 中(而不是某些块设备中)的文件系统。mount -t ramfs …类似。

modprobe brd rd_nr=1 rd_size=…可以/dev/ram0创建使用 RAM 的块设备。但它本身并不是文件系统。要在其中存储文件,您需要创建一个文件系统(就像在任何其他块设备中一样)并将文件系统挂载到某处。文件将存在于 RAM 中块设备中的文件系统中。

如果tmpfs文件存在于文件系统中,而文件系统存在于 RAM 中。文件系统和 RAM 之间没有块设备。这就是为什么lsblk --all没有打印与相关的条目tmpfs。这不是被过滤掉的东西。在这个方案中没有块设备根本

我实际上已经测试过lsblk --all使用块设备的 ramdisk。在我的 Debian 中lsblk --all确实显示ram0。我还使用zram0交换和我的lsblk --all节目zram0。看起来如果有一个块设备lsblk --all则会显示它。


进化

上述研究也证实了这一点Debian Wiki 上的文章这让我们了解了这些事情是如何演变的:

使用 ramfs 时,没有后备存储。[…] 较旧的“ram 磁盘”机制从 RAM 的某个区域创建了一个合成块设备,并将其用作文件系统的后备存储。[…] ram 磁盘根本没有用。[…] 创建了一个名为 tmpfs 的 ramfs 衍生产品 […]。

较旧的机制是带有左右的机制/dev/ram0。在某个时候,块设备的不必要层被移除并被ramfs发明。然后ramfs被改进并tmpfs出现。

相关内容