我刚刚发现了打印与给定文件关联的元数据mdls
的命令OS X
。此命令告诉我“物理大小”(“kMDItemPhysicalSize”)和“逻辑大小”(“kMDItemLogicalSize”)。例如,我正在查看的当前文本文件有:
- 物理尺寸:1152
- 逻辑大小:4096
如果我执行ls -l
,它的大小将为 1152。如果我打开“获取信息”面板,它会显示“1,152 字节(磁盘上 4 KB)”。因此,无论“逻辑大小”是多少,它显然都等于“磁盘上”的大小。
答案1
磁盘分为多个扇区,在典型的硬盘或 SSD 上每个扇区为 512 字节*。
文件系统负责根据名称(您理解的名称)接收文件请求,并将其转换为块读/写请求(磁盘理解的名称)。要实现这一点,需要一份哪些扇区属于哪个文件的映射。有很多方法可以做到这一点,因此,存在许多文件系统。例如,Windows 使用 NTFS 和 FAT32,而 Linux 有许多文件系统,包括 ext2、ext3 等。不确定 Mac 文件系统是否如此,但原理是一样的。
有些文件系统在扇区之上还有一个层级,称为簇它们是扇区的集合 - 因为大磁盘上每个扇区的映射可能会占用太多空间。例如,在 NTFS 上,您可以指定簇大小(“分配单元”是它的另一个名称),4096 字节(8 个扇区)是您可以选择的簇大小之一。
因此,考虑到所有这些,您真正可以读取或写入磁盘的“最小值”将是扇区大小或簇大小。因此,虽然您可以将 4097 个字节写入磁盘,但文件系统必须为该文件提供两个簇,因此它会从您的可用空间中占用 8192 个字节。因此,您有物理大小(它在磁盘上占用的大小)和逻辑大小(文件的实际大小)。
*在一些较新的“高级格式”磁盘上,其内部大小为 4KB,但为了兼容,对操作系统来说,它仍然看起来像 512 字节扇区。SSD 的内部大小有很大不同,但对操作系统来说,它仍然看起来像 512 字节扇区。
答案2
你们搞反了。
在 MacOS 上,“逻辑”大小是文件的大小。我们可以将文件的大小定义foo
为以下输出:
$ cat foo | wc -c
“物理”大小是文件在磁盘上占用的字节数。
证明:
$ cat /dev/urandom | head -c 1 > foo; mdls foo | grep 'Logical\|Physical'
输出:
kMDItemLogicalSize = 1
kMDItemPhysicalSize = 4096
du -h foo
您可以确认输出的物理尺寸4.0k