为什么通过“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
出现。