答案1
这个问题的答案主要在于查看 LUKS 在整个堆栈中的插入位置。它建立在 Linux 设备映射器子系统之上(通过 dm-crypt),该子系统在文件系统下方的“块设备”级别上工作;解锁 LUKS 卷会创建一个虚拟/dev/dm*
设备,然后从该虚拟设备挂载文件系统。
块设备(在本例中为虚拟 DM 设备,无论是 dm-crypt 设备、dm-raid 设备还是其他设备)的内部操作对于文件系统或 VFS 层而言是完全不可见的。因此,文件系统(或 VFS)管理的所有缓冲区仅包含原始数据;它在 write() 时未加密,因为子系统不知道正在使用任何加密。
当您时sync
,包含原始数据的文件系统缓冲区将被写入底层块设备,该设备(如果它是 dm-crypt 设备)将加密每个块并将现在加密的写入转发到底层物理分区。
与物理磁盘设备相对应的缓冲区包含加密数据,因为它只接收来自其上方的 dm-crypt 层的加密写入。
(与 'fscrypt' 相比,它是内置于文件系统中。)