我有一台机器有 62GB 的 RAM,而后备箱只有 7GB,所以我想我会创建一个 RAM 磁盘并在那里编译。我不是 Linux 专家。我在互联网上找到了创建 RAM 磁盘的说明:
mkfs -q /dev/ram1 8192
Run Code Online (Sandbox Code Playgroud)
但是我将 8192 更改为 16777216 以尝试分配 16GB 的 ram 磁盘。
我收到以下错误:
mkfs.ext2: Filesystem larger than apparent device size.
Proceed anyway? (y,n)
Run Code Online (Sandbox Code Playgroud)
在这一点上,我受到惊吓并被保释。
sudo dmidecode --type 17 | grep Size
Run Code Online (Sandbox Code Playgroud)
显示
8x8192MB + 2048MB = 67584 MB
Run Code Online (Sandbox Code Playgroud)
但du
在/dev
给804K
。
这是问题吗?我能克服那个/dev
尺寸吗?
有很多关于 RAM 磁盘的问题,我知道 ramfs 和 tmpfs 允许将 ram 用作块设备。然而,我的兴趣是使用固定的内存地址范围作为块设备。
这是因为必须使用我的系统中可用的非易失性 RAM。我有 6GB 的 RAM 可用,以及 8GB 的非易失性 RAM。/proc/iomem 的输出给了我以下内容
100000000-17ffffffff:系统内存
180000000-37ffffffff : 保留
这里从 6GB 到 14GB 的区域对应于非易失性 RAM 区域,该区域由 E820 BIOS 内存映射标记为保留。我的主要意图是将此 NVRAM 用作 linux 中的块设备。这对于测试 NVRAM 系统很有用。是否已经存在任何允许我将此区域用作块设备的 linux 命令,或者我是否必须编写自己的内核设备驱动程序来实现相同的功能?
我的 PC 中有 32 GB 内存。这对于 linux 操作系统来说已经足够了。是否有易于使用的 Linux 版本(最好是 Ubuntu),可以通过光盘或 USB 磁盘启动并完全在 RAM 中运行?我知道 Live 光盘可以用硬盘启动,但内容仍然会从光盘上运行,这需要一段时间才能加载。我希望所有内容都加载到 RAM 中,然后从那里运行,完全不稳定。我需要创建的任何文件都将保存到 USB 磁盘。
我知道http://en.wikipedia.org/wiki/List_of_Linux_distributions_that_run_from_RAM但这些都依赖于一点点 RAM。我更喜欢像 Ubuntu 这样的东西而不是这些轻量级的版本。
我正在使用带有 Linux 的 BeagleBone 板。
当我输入命令“ df -h ”时,我看到 tmpfs 被安装了几次。
这是否意味着所有这些条目都安装在同一位置,或者 tmpfs 的不同部分?
这让我想到了另一件事我不太明白。这个 tmpfs 文件系统实际上是在哪里创建的?我猜它是在 Linux 启动时发生的。我应该能够找到创建此文件系统的脚本吗?
tmpfs 242.4M 0 242.4M 0% /dev/shm
tmpfs 242.4M 8.3M 234.2M 3% /run
tmpfs 242.4M 0 242.4M 0% /sys/fs/cgroup
tmpfs 242.4M 36.0K 242.4M 0% /tmp
tmpfs 242.4M 16.0K 242.4M 0% /var/volatile
tmpfs 242.4M 16.0K 242.4M 0% /var/lib
Run Code Online (Sandbox Code Playgroud) 我已经为 Ubuntu 14.04 KVM 主机更新了我的KVM 管理脚本以支持 debian 8 来宾。手动安装后(预置脚本还不起作用),我在启动时遇到以下消息:
在安装过程中,我:
是否需要小心执行某些步骤,或者 Debian 8 尚未安装为 KVM 来宾?
在放弃并决定通过将所有行更新/etc/apt/sources.list
为jessie
而不是将 debian 7 VM 升级到 debian 8之后wheezy
,我发现我最终得到了相同的行为。
然而,这个实例有一个静态 IP,我发现我仍然可以通过 SSH 连接到该 IP 上的服务器,所以看起来这是某种图形问题,服务器确实设法启动,我们只是看不到登录文本。我该如何解决这个问题?
这一次,在通过升级 debian 7 创建的 debian 安装上,我可以从 grub 菜单中单击高级并选择现在可用的 (sysvinit) 选项。我希望这可以解释启动的正常版本出了什么问题?
我使用 tmpfs 创建了一个 ramdisk,如下所示:
sudo mount -t tmpfs -o size=1024m tmpfs /myramdisk
Run Code Online (Sandbox Code Playgroud)
我正在研究 cgroup blkio 子系统带宽限制“read_bps_device”和“write_bps_device”,但它们似乎需要您想要限制访问的块设备的主要和次要编号。
有没有办法实现与内存中 tmpfs ramdisk 类似的带宽限制?
更新:我找到了一种迂回的方法来完成这个。我先nfs 导出ramdisk 挂载。然后 nfs 在同一台机器上通过环回挂载它。然后我使用 linux 网络流量整形来设置带宽限制。这似乎提供了我需要的东西。我正在执行一些测量以查看这种可怕的分层所带来的损失。过几天我会更新这方面的信息。
我的 Debian 伸展系统有很多内存。目前,它在 SSD 上使用加密交换分区,但在正常情况下,我不希望内存不足导致使用它。
但是根据 Snakedoc 的评论,完全关闭交换是一个坏主意:
请注意,完全禁用交换永远不会“安全”。即使系统具有 96+ GB 的内存,运行至少 512MB 的交换也是一个很好的安全措施。如果某些东西运行异常并意外吃掉所有 ram,它会让您的系统有时间杀死不必要的进程......禁用交换的替代方法是内核恐慌。
所以我想我可能会保留一些内存,比如 0.5G 用于“RAM 磁盘”,并将其用作交换文件,将写入保存到 SSD。
我怎么做?出于某种原因,这是一个坏主意吗?
我已经从全新安装中复制了两次 - 设置最初工作正常,但是当应用内核更新时,系统在重新启动时挂起。选择 GRUB 提供的旧内核效果很好。
系统详细信息:
我尝试过的 GRUB 设置肯定不起作用:
及其所有排列。
initrd.img 和 initrd.img.old(我可以启动)文件的 lsinitramfs 不会弹出任何明显的候选者。
它似乎可能与微代码或 cryptsetup 相关,但由于调试没有提供任何信息,并且一旦我用 36 启动,dmesg 可能会报告正常启动,所以我有点不知所措。
有什么想法吗?似乎存在相关的错误,但没有完全重现。
我正在寻找一种方法来拥有一个类似 tmpfs 的文件系统,该系统的大小可以不受限制,但会使用指定数量的 RAM,之后“超大”数据将存储在另一个磁盘支持的文件系统上
我在仅 SSD 的系统上运行,可用空间较低(通常< 3 GB),因此我不想为 SWAP 或类似内容保留任何空间(这是我的主要要求)
您知道有适合我的用例的解决方案吗?
我们正在建立一个基于 Linux 的基准测试集群。每个节点都将是一个无头、无盘的机器,通过 tftp 启动,将操作系统复制到本地 ramdrive,并且相同的 ramdrive 被基准测试应用程序用作本地驱动器。我的问题如下:
这些机器有 2 个 CPU,每个 CPU 都有自己的内存条,并有 4 个通往这些内存条的内存通道(因此内存条中装有 4 个内存芯片的倍数,以获得最大的内存吞吐量)。如果我无法控制 ramdisk 使用哪些内存区域,那么它可能会在一个单通道上的区域中创建,并使用该芯片上的所有内存。这意味着当我的应用程序运行时,在从其内存组中获取 ramdisk 的 CPU 上运行的线程到其“本地”内存的内存带宽将比其他 CPU 上的线程少 25%。那太糟糕了。因此希望控制 ramdisk 使用哪些内存区域。
或者这不是问题,我可以相信内存控制器在 4 个通道上的芯片之间以跨步方式布置连续的内存地址?这是有道理的,因为这将在将大块内存拉入缓存时最大化内存带宽。
我只是不知道这些东西是如何工作的,希望得到一些启发......