Linux:如何在不挂载的情况下创建并附加 RamDisk?

Linux:如何在不挂载的情况下创建并附加 RamDisk?

在 Linux 上,如何在不挂载的情况下创建和附加 RAM 磁盘?另外,如何/dev/sdb找到分配给 RAM 磁盘的设备名称?最后,如何分离RAM盘(未挂载的)呢?

我想创建并附加 RAM 磁盘,但不想安装它。我想把它卸下来。

在 Mac OS X 上,以下命令创建并附加 100MiB RAM 磁盘而不安装它。

hdiutil attach -nomount ram://204800

# In terms of the number of 512-byte sectors,
# 100 MiB is equivalent to 204800 sectors.

成功完成后,上述命令将返回设备名称,例如/dev/disk1分配给 RamDisk 的设备名称。但是,稍后当您忘记设备名称时,可以通过以下 OSX 命令(以及 GUI 应用程序磁盘工具)找到它。

# Displays the list of attached disks.
diskutil list

# Displays the details of a specific disk.
diskutil info /dev/disk1

最后,在 Mac OS X 上,要分离 RAM 磁盘,无论是否已安装,以下命令(以及 GUI 应用程序磁盘工具)都有效。如果已安装,此命令将首先自动卸载它。

hdiutil detach /dev/disk1

在Linux上,如何实现以上三个操作呢? (如果我要求的操作可能依赖于发行版,那么我对 Debian 9 特别感兴趣。)

我不想挂载 RAM 磁盘的原因之一是我想对dd直接在磁盘(或设备)上读写的命令进行一些实验,绕过文件系统。事实上,直写模式dd需要卸载设备上的卷,但设备仍处于附加状态且不弹出。

在 Linux 上,以下mount命令创建、附加并安装 100MiB RAM 磁盘。

mkdir /mnt/ramdisk
mount -t tmpfs -o size=100m tmpfs /mnt/ramdisk

但是,我不知道如何禁用“安装”部分。

顺便说一句,对于那些想知道除了创建和附加之外如何在 Mac OS X 上安装 RAM 磁盘的人,这里是命令。

diskutil erasevolume HFS+ "RamD" $(hdiutil attach -nomount ram://204800)

# 204800 is the number of 512-byte sectors,
# resulting in 100 MiB.
#
# "RamD" is a volume name or label.
#
# "erasevolume" means to format the volume, 
# but it does not necessarily write zeros.

答案1

您的情况的问题是,对于 tmpfs,没有可以安装的基于 RAM 的块设备。通常,当 Linux 从文件系统读取时,文件驻留在块设备上,通常是硬盘分区。当从磁盘(后备存储)读取文件时,数据会缓存在 RAM 中。

Tmpfs 切断后备存储:写入到缓存,读取从缓存读回写入的数据。这意味着没有可以dd访问的块设备。

根据您的需要,我建议使用循环设备,它使您能够将存储在文件中的磁盘映像挂载为文件系统。例如:

losetup /dev/loop0 filesys.image

其中filesys.image是包含文件系统映像的文件。这使得/dev/loop0看起来像一个以文件filesys.image作为后备存储的块设备。看man losetup

相关内容