我有带 btrfs 的 SSD,我尝试创建一个交换文件,如:
dd if=/dev/zero of=swapfile01 bs=1M count=10240
mkswap swapfile01
chmod 600 swapfile01
swapon swapfile01
Run Code Online (Sandbox Code Playgroud)
在 dmesg 我看到
[238434.731654] swapon: swapfile has holes
Run Code Online (Sandbox Code Playgroud)
我知道可能有一些由磁盘碎片引起的漏洞,但这是 SSD 磁盘,所以它可能无关紧要?有没有办法忽略这些漏洞?或者我该如何解决这个问题?
题外话 - 为什么我想要这个(为了避免评论中的不相关问题):我加密了磁盘,这在调整大小时很痛苦,所以我决定创建一个交换文件而不是调整交换分区的大小(我添加了 14GB ram,从 4gb 到 16gb,现在不能休眠)。
Mar*_*oft 11
如上所述,从 Linux 5.0 开始,现在可以在 BTRFS 上创建交换文件。但它们应该是非压缩和 NoCOW。以下是您如何实际创建这样的文件:
touch /swapchattr为其设置NoCOW属性:chattr +C /swapC属性是否出现:lsattr /swapdd if=/dev/zero of=/swap bs=1M count=1024 # 1 GBmkswap /swap && chmod 600 /swap && swapon /swap或者,您可以创建一个目录,设置chattr +C为该目录,然后在其下创建一个交换文件。
请注意,您不能chattr +C对已经存在的非空文件进行操作。它被记录为未定义的行为(实际上它只是不改变属性)。因此,您应该创建一个空文件,然后chattr创建一个目录,chattr然后在其中创建一个文件(在这种情况下,在chattring 目录之后创建的所有文件都将具有 nocow 属性)。
警告:如前所述,这需要内核版本 5.0 或更高版本。例如,Raspberry Pi 使用 4.19.* 内核,因此您将无法在其上使用此技术。
Btrfs 和 Linux 内核的发展使我原来的答案过时了。请参阅此其他答案。
来自btrfs 常见问题解答:
btrfs 支持交换文件吗?目前没有。仅创建文件 NOCOW 没有帮助,交换文件支持依赖于 btrfs 由于潜在损坏而有意未实现的一项功能。(...) 尽管性能不佳,但解决方法是通过循环设备挂载交换文件。
所以目前还没有在 btrfs 分区上创建交换文件的好方法。
小智 7
交换文件支持已添加到内核版本 5.0,可以在提交https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7 中看到 以激活btrfs 上的交换文件,文件必须完全分配为 NOCOW,在一台设备上没有压缩。
在 Linux 5.0 或更高版本中:
file='/swapfile'
# create file
touch "$file"
# No Copy-on-Write
chattr +C "$file"
# Allocate 10 GB (much faster than dd)
fallocate -l 10G "$file"
# Set permissions to make mkswap happy
chmod 600 "$file"
# Set swap file signature
mkswap "$file"
# change owner if not already root to make swapon happy
sudo chown root "$file"
# Activate
sudo swapon "$file"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15418 次 |
| 最近记录: |