Mar*_*tto 33 linux file-management filesystems macos
我注意到在非 Windows 操作系统上......即 Linux/Mac 我可以做这样的事情:
并且传输不会失败。
或者,我可以执行诸如..
虽然文件被“删除”,正如我提到的,它们实际上被移动到文件系统上的不同位置......即垃圾目录或其他东西。所以在我看来,操作系统使用一个指针 @ 文件,当它移动而不是直接访问文件时会更新该文件。
任何人都可以阐明这种令人敬畏的功能是如何实际实现的吗?我什至不知道要谷歌什么才能了解更多。
Bil*_*hor 32
目录条目只是一个指向 inode 的指针。inode 包含有关文件的元信息(名称除外)和指向文件数据的指针(如果有)。当您开始复制文件时,您将获得一个指向 inode 的句柄。
操作系统维护对 inode 的引用计数。只要有对 inode 的引用,就会保留 inode 和文件的数据。一旦删除了对 inode 的所有引用,inode 就会被删除,并且文件所需的空间将被释放。
当您打开文件进行复制时,它将一直保留到您的进程关闭文件。这应该在文件传输完成时发生,如果复制过程失败也会发生。如果文件传输中途失败并且您删除了文件的所有硬链接,您将无法成功重新启动传输。
编辑:正如其他人所指出的,在同一设备上移动文件是在不移动数据的情况下完成的。而是在目标目录中创建一个新目录条目,并删除原始目录条目。
同一个文件可以有多个目录条目。这些被称为硬链接。它们是通过为文件创建新目录条目而不删除原始条目来创建的。文件系统的 inode 有一个引用计数来记录指向文件的目录条目的数量。
EDIT2:如果进程崩溃或被杀死,文件将被彻底删除,因为内存访问计数将减少为零。这是程序正常结束时发生的动作。
在电源故障或其他无序系统关闭的情况下,磁盘将需要fsck
(文件系统检查)才能完全安装。根据磁盘 inode 和目录结构的状态,空间将被恢复,文件将保留在目录中,或者在目录中创建一个新条目lost+found
。结果将取决于哪些更改已刷新到磁盘或写入文件系统日志。
正如 Matt Jenkins 所解释的那样,操作系统(文件系统)会跟踪应用程序保持打开的文件。只要进程保持文件打开,其数据就会保留在磁盘上(即使它已被删除并且其他程序不再可见或可访问)。
请注意,这样做的结果是文件占用的空间只能在最后一个使用它的进程关闭它后才能回收。这是 Linux/Unix 文件系统操作的常见问题解答:“'df' 命令表示分区已满,而 'du' 报告可用空间”(参见例如http://batleth.sapienti-sat.org/projects/FAQs/ext3-常见问题解答.html)。如果您需要释放空间,仅删除大文件(例如日志文件)是不够的,您还必须确保没有进程使它们保持打开状态(通常是日志文件的问题)。
归档时间: |
|
查看次数: |
16681 次 |
最近记录: |