对于非关键的 Linux 系统,我经常将 /tmp 和 /var/log 之类的内容移动到 tmpfs 以节省一些磁盘写入。我已经这样做了一年左右,如果我在重新启动时需要日志,我只需在 /etc/fstab 中注释掉一行,然后开始调试。
无论如何,我想在 OS X 上做同样的事情。我看过有关为 OS X 创建 ramdisk 的帖子,但我正在寻找一个更持久的解决方案,适用于每次启动。我总是希望 /tmp 和 /var/log 安装在 ramdisk 中,如果需要,可以在 vi 中通过一些命令行编辑将其关闭。
我的 tmpfs /tmp 使用 RAM,准确地说是 2GB。通常,这已经足够了,但有时,进程会在其中创建文件并且无法自行清理。如果它们崩溃,就会发生这种情况。我需要删除这些孤立的 tmp 文件,否则未来的进程将耗尽 /tmp 上的空间。
我怎样才能安全地垃圾收集/tmp?有些人通过检查上次修改时间戳来做到这一点,但这种方法是不安全的,因为可能有长时间运行的进程仍然需要这些文件。一种更安全的方法是将最后修改时间戳条件与没有进程具有该文件的文件句柄的条件结合起来。是否有一个程序/脚本/等体现了这种方法或其他一些也安全的方法?
顺便说一句,Linux/Unix 是否允许在创建时打开文件的模式,其中创建的文件在创建过程终止时被删除,即使它是崩溃的?
摘自文档
因此,'mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs' 将为您提供 /mytmpfs 上的 tmpfs 实例,它可以在 10240 个 inode 中分配 10GB RAM/SWAP,并且只能由 root 访问。
请注意命令行:
mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs
Run Code Online (Sandbox Code Playgroud)
让我困惑的是第二个tmpfs
。该手册页说什么的选项tmpfs
,这是什么意思?
我想知道是否有人尝试创建 RAM 磁盘,然后将 2GB(有时为 1.2GB).vhd 文件放入其中,然后使用此映像运行虚拟 PC。
它应该运行得非常快,因为现在硬盘是由RAM模拟的......我从未尝试过,但看到Linux上有tmpfs。因此,使用 VirtualBox,它应该是可行的...在 Windows 或 Mac 上如何,之前有人尝试过并看到它的速度有多快?
PS由于历史原因,2009年硬盘不是SSD,访问物理旋转硬盘可能需要大量时间,1个文件映射到硬盘的某个虚拟结构。我认为“虚拟PC的状态”都可以在计算机的物理RAM中,所以不是问题。现在我们有了SSD,它就像一个假装是硬盘的RAM Disk,所以它应该是相当快的)。
virtualbox ramdisk microsoft-virtual-pc tmpfs virtual-machine
我不知道是否有任何方式指定RAM缓存用于存储大小ramfs
,tmpfs
?
当我查看时/proc/
,我找不到任何关于ramfs
大小的信息。
在 Linux 上,假设我有一个可执行文件。让我们看两种情况:
(A)可执行文件的很大一部分是磁盘 I/O;
(B)可执行文件不执行任何磁盘 I/O。
对于每种情况A和B,我是否应该期望这两种情况之间的可执行文件的运行时间存在显着差异?
(1)可执行文件和所有涉及的文件都在一个 tmpfs 文件夹(一个 RAM 文件夹)中;
(2)可执行文件和所有涉及的文件都在“常规”磁盘文件夹中。
我还对是否应该期待与 Docker 相关的这三个场景之间存在显着差异感兴趣:
(3)可执行文件从 Docker 容器内运行,并且该可执行文件和所有涉及的文件都在从内部创建的 tmpfs 文件夹中使用docker run -v ...
(4)挂载的磁盘驱动器下的容器可执行文件从 Docker 容器内运行,并且可执行文件和所有涉及的文件都位于从容器内创建的 tmpfs 文件夹中,位于“内部”驱动器(即容器停止后不会持续存在)。
(5)可执行文件从 Docker 容器内运行,并且可执行文件和所有涉及的文件都在“常规”磁盘文件夹中。
我的期望是,一般来说,从 tmpfs 文件夹运行应该更快,主要是在涉及大量磁盘 I/O 时。但我在实践中没有看到这一点,所以我想看看我的期望是否正确。
有什么方法可以限制 tmpfs 使用的 RAM 量而不限制交换量?
大多数文档都说 tmpfs 的size
选项将限制 tmpfs分区的总大小,稍后会说这个空间由 RAM 和 SWAP 使用。然后说默认是你内存的一半,因为如果它用完所有的内存,你会得到 OOM 致命错误。这很混乱。
例如,我希望使用 1/4 的内存但最多使用 3/4 的交换。
典型的linux机器挂载atmpfs
来存储临时文件:
$ df
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 953M 702M 203M 78% /
tmpfs 1.5G 111M 1.5G 0% /tmp
...
Run Code Online (Sandbox Code Playgroud)
在实时计算机上,如何将底层内存作为tmpfs
块设备访问,以便将其映像用于dd
文件恢复/取证/入侵检测目的?没有设备可以/dev
正确地将所使用的内存隔离并映射tmpfs
到块设备。
此处已提出此问题,但没有一个答案有帮助:https://www.linuxquestions.org/questions/linux-general-1/how-to-backup-ramfs-or-tmpfs-using-dd-4175422520 /
我运行 df -h 并在我的 Debian Squeeze 上找到两个 tmpfs 目录,
tmpfs 1.5G 0 1.5G 0% /lib/init/rw
tmpfs 1.5G 0 1.5G 0% /dev/shm
Run Code Online (Sandbox Code Playgroud)
然后,我在 /etc/fstab 中添加了一行,如下所示,
tmpfs /tmp tmpfs size=1g 0 0
Run Code Online (Sandbox Code Playgroud)
我重新启动了 Debian 并发现 /tmp 安装成功。
tmpfs 1.0G 236K 1.0G 1% /tmp
tmpfs 1.5G 0 1.5G 0% /lib/init/rw
tmpfs 1.5G 0 1.5G 0% /dev/shm
Run Code Online (Sandbox Code Playgroud)
我的物理内存大小是 3GB。我想知道:这三个 tmpfs 是全部驻留在内存中(这可能吗?)还是扩展到交换?
使用 fedora@latest,我已/tmp
安装为tmpfs
.
有时我会运行一些程序将大文件存储到其中,直到完全填满为止。
我尝试手动删除一些文件,希望释放空间,但空间并未释放。
我可以说它与打开的文件句柄无关,因为我一直在手动测试它,结果如下,
前,
$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/fedora-root 32G 20G 9,8G 68% /
tmpfs 1,9G 0 1,9G 0% /tmp
/dev/sda5 126G 71G 50G 59% /home
Run Code Online (Sandbox Code Playgroud)
然后我将一个文件复制到它上面,cp
用于演示:
$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/fedora-root 32G 20G 9,8G 68% /
tmpfs 1,9G 487M 1,5G 26% /tmp
/dev/sda5 126G 71G 50G 59% /home
Run Code Online (Sandbox Code Playgroud)
然后我删除了文件,用 rm
$ df -h
Sys. de …
Run Code Online (Sandbox Code Playgroud) tmpfs ×11
linux ×9
filesystems ×2
memory ×2
ramdisk ×2
block-device ×1
dd ×1
debian ×1
docker ×1
imaging ×1
mac ×1
macos ×1
mount ×1
partitioning ×1
swap ×1
unix ×1
virtualbox ×1