Pilot6 Asked: 2020-01-28 11:11:29 +0800 CST2020-01-28 11:11:29 +0800 CST 2020-01-28 11:11:29 +0800 CST 我可以在 btrfs 上有一个交换文件吗? 772 现代 Ubuntu 版本默认使用交换文件而不是交换分区。 在 5.0 Linux 内核之前,无法在btrfs分区上放置交换文件,btrfs文件系统可能会损坏。 现在内核支持 btrfs 分区上的交换文件。我可以在安装的 Ubuntu 上使用交换文件btrfs吗?可能存在哪些问题? btrfs swap 4 个回答 Voted Best Answer Pilot6 2020-01-28T11:28:06+08:002020-01-28T11:28:06+08:00 可以在 上使用交换文件btrfs,但需要注意一些注意事项。 btrfs如果子卷上有一个工作交换文件,文件系统不允许创建快照。这意味着强烈建议将交换文件放在单独的子卷上。 让我们假设当前的交换已经关闭,并且 Ubuntu 安装在子卷/上并且在子卷上。/dev/sda1/@/home@home 安装/dev/sda1到/mnt. sudo mount /dev/sda1 /mnt 如果您运行ls /mnt,您将看到@,@home以及可能存在的其他子卷。 创建一个新的@swap子卷。 sudo btrfs sub create /mnt/@swap 卸载/dev/sda1_/mnt sudo umount /mnt 创建/swap我们计划挂载子卷的目录@swap。 sudo mkdir /swap 将子卷挂载@swap到/swap. sudo mount -o subvol=@swap /dev/sda1 /swap 创建交换文件。 sudo touch /swap/swapfile 为文件设置 600 权限。 sudo chmod 600 /swap/swapfile 禁用此文件的 COW。 sudo chattr +C /swap/swapfile 以设置交换文件大小为 4G 为例。 sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=4096 格式化交换文件 sudo mkswap /swap/swapfile 打开交换文件。 sudo swapon /swap/swapfile 现在新的交换应该可以工作了。 您还需要更新/etc/fstab以在启动时挂载所有这些。添加两行: UUID=XXXXXXXXXXXXXXX /swap btrfs subvol=@swap 0 0 /swap/swapfile none swap sw 0 0 这UUID是你的一个/dev/sda1。 交换文件不能位于任何类型的 btrfs RAID 上。 欢迎提出意见和建议。 zilexa 2020-12-11T07:52:08+08:002020-12-11T07:52:08+08:00 请注意,对于具有 NVME SSD 的现代系统/笔记本电脑,您/dev/nvme0n1p2应该/dev/sda1忽略 /dev/nvme0n1p1,因为这是您的操作系统在安装时创建的 efi 启动磁盘。 此外,建议添加两个挂载选项“defaults”和“noatime”。默认值将自动加载驱动器(SSD、HDD)的安装选项。如果仅打开文件,Noatime 将阻止文件被写入: UUID=XXXXXXXXXXXXXXX /swap btrfs defaults,noatime,subvol=@swap 0 0 /swap/swapfile none swap sw 0 0 Krazy ForthreeD 2021-04-20T17:51:34+08:002021-04-20T17:51:34+08:00 流行的答案是正确的,只是您不应该使用fallocate(1) 为交换文件分配空间。它可以创建与交换文件使用不兼容的文件系统“漏洞”(交换需要 100% 的连续空间,因为文件系统未在交换空间内使用)。您应该改用 'dd if=/dev/zero ...'。请参阅此线程上的答案: fallocate vs dd for swapfile? mkswap(8) 和 swapon(8) 联机帮助页都明确不鼓励使用 fallocate(1) 在文件系统上实例化交换文件。 Jorge Mendes 2021-07-26T00:48:01+08:002021-07-26T00:48:01+08:00 如果您的分区已加密 (LUKS),则挂载点打开/dev/mapper,例如: /dev/mapper/nvme0n1p5_crypt /swap btrfs defaults,noatime,subvol=@swap 0 0 /swap/swapfile none swap sw 0 0 here 要uuids运行blkid命令: /dev/mapper/nvme0n1p5_crypt: UUID="06c8c73c-1cc4-477b-a687-6c21697d645d" UUID_SUB="7f884b26-d76e-49db-9959-311fa2a5dd20" TYPE="btrfs" /dev/nvme0n1p1: UUID="8090a824-63fa-4087-a948-89cca1a369cd" TYPE="ext2" PARTUUID="887ff27b-01" /dev/nvme0n1p5: UUID="46405308-2ed1-40f3-a86b-906f1118970b" TYPE="crypto_LUKS" PARTUUID="887ff27b-05" 然后将mapper位置替换为特定的uuid UUID=06c8c73c-1cc4-477b-a687-6c21697d645d /swap btrfs defaults,noatime,subvol=@swap 0 0 /swap/swapfile none swap sw 0 0
可以在 上使用交换文件
btrfs
,但需要注意一些注意事项。btrfs
如果子卷上有一个工作交换文件,文件系统不允许创建快照。这意味着强烈建议将交换文件放在单独的子卷上。让我们假设当前的交换已经关闭,并且 Ubuntu 安装在子卷
/
上并且在子卷上。/dev/sda1
/
@
/home
@home
安装
/dev/sda1
到/mnt
.如果您运行
ls /mnt
,您将看到@
,@home
以及可能存在的其他子卷。创建一个新的
@swap
子卷。卸载
/dev/sda1
_/mnt
创建
/swap
我们计划挂载子卷的目录@swap
。将子卷挂载
@swap
到/swap
.创建交换文件。
为文件设置 600 权限。
禁用此文件的 COW。
以设置交换文件大小为 4G 为例。
格式化交换文件
打开交换文件。
现在新的交换应该可以工作了。
您还需要更新
/etc/fstab
以在启动时挂载所有这些。添加两行:这
UUID
是你的一个/dev/sda1
。交换文件不能位于任何类型的 btrfs RAID 上。
欢迎提出意见和建议。
请注意,对于具有 NVME SSD 的现代系统/笔记本电脑,您
/dev/nvme0n1p2
应该/dev/sda1
忽略 /dev/nvme0n1p1,因为这是您的操作系统在安装时创建的 efi 启动磁盘。此外,建议添加两个挂载选项“defaults”和“noatime”。默认值将自动加载驱动器(SSD、HDD)的安装选项。如果仅打开文件,Noatime 将阻止文件被写入:
流行的答案是正确的,只是您不应该使用fallocate(1) 为交换文件分配空间。它可以创建与交换文件使用不兼容的文件系统“漏洞”(交换需要 100% 的连续空间,因为文件系统未在交换空间内使用)。您应该改用 'dd if=/dev/zero ...'。请参阅此线程上的答案: fallocate vs dd for swapfile? mkswap(8) 和 swapon(8) 联机帮助页都明确不鼓励使用 fallocate(1) 在文件系统上实例化交换文件。
如果您的分区已加密 (LUKS),则挂载点打开
/dev/mapper
,例如:要
uuids
运行blkid
命令:然后将
mapper
位置替换为特定的uuid