gpt4 book ai didi

git - 为什么在 exFAT 上复制的 git 文件夹的大小比在 ext4 上的原始文件夹大?

转载 作者:太空狗 更新时间:2023-10-29 14:00:24 24 4
gpt4 key购买 nike

我在 ext4 磁盘上有一个 git 文件夹(这是一个 git repo):

ytsen@ytsen-MacBookPro:~$ du -hcs ~/git
3,2M /home/ytsen/git
3,2M total

现在我将其复制到带有 exFAT 文件系统的 U 盘中:

ytsen@ytsen-MacBookPro:~$ cp -r ~/git /media/ytsen/USB\ Flash/git3
cp: preserving permissions for ‘/media/ytsen/USB Flash/git3/hooks’: Function not implemented
cp: preserving permissions for ‘/media/ytsen/USB Flash/git3/objects/49’: Function not implemented
cp: preserving permissions for ‘/media/ytsen/USB Flash/git3/objects/68’: Function not implemented

<snip>

现在这个文件夹的大小要大得多:

ytsen@ytsen-MacBookPro:~$ du -hcs /media/ytsen/USB\ Flash/git3
23M /media/ytsen/USB Flash/git3
23M total

问题:这是为什么,我应该担心吗?

问题:我现在是否遇到文件权限问题(请参阅 cp 生成的输出)?

附言。我可以从 U 盘上的副本中查看,检索文件或历史记录似乎完全没有问题......

最佳答案

簇大小和松弛空间

文件使用的空间量不仅仅包括文件的字节数。在ext2/3/4和基于FAT的文件系统中,每个文件至少占用一个 block /簇*,每个 block /簇至多属于一个文件。因此,集群中不属于文件内容的任何剩余空间基本上都被浪费了。这种浪费空间的常用术语是“闲置空间”。

浪费了多少空间,部分取决于簇/ block 的大小。通常,您希望文件越小,您希望集群越小,因为小集群意味着更少的空闲空间。

不过,FAT 文件系统包括一个“文件分配表”(它就是为此而命名的),它说明了哪些簇被哪些文件占用。 FAT 对驱动器上的每个簇都有一个条目;如果集群是一半大,那么它们的数量就会增加一倍,因此 FAT 最终需要管理两倍的条目。因此系统倾向于支持大集群(16 KiB、32 KiB,甚至更高——exFAT 允许高达 32 MiB/集群,尽管这可能并不常见)。

另一方面,在 ext4 中,事情的处理方式不同——以一种对 block 的大小/数量不太敏感的方式。所以它不太介意小块,通常会有 1、2 或 4 KiB 大小的 block 。 (大文件系统可能有更大的 block ,但到那时,空间可能不是问题。)

综上所述,一个 100 字节左右的文件可能很容易在 ext4 文件系统上占用 4 KiB,在 exFAT 上占用 32 KiB。因此,如果您有很多小文件,当您将这些文件从具有小块的 FS 移动到具有更大块的 FS 时,您会注意到空间使用量的巨大增加。

保留权限(或...不)

一些文件系统(包括大多数以前的 FAT 文件系统)不支持 *nix 风格的权限。其他人这样做,但尚未编写驱动程序来利用它们。在这些情况下,系统通常会使用 FS 自己的内置功能尽可能接近权限,或者只是说“去他的”并让有权访问设备的任何人都可以访问文件。

(对于 exFAT,我不能 100% 确定会发生什么......但我会把钱花在后者上。)

无论哪种方式,Git 通常 都不太关心;它只关心它可以读取和写入 repo 中的文件(尤其是 .git 文件夹中的文件)。如果您有足够的访问权限来复制文件并在之后实际看到它们,您应该没问题。

(不过有一个警告。我不确定 exFAT 是否或如何处理符号链接(symbolic link)。如果您的存储库包含任何符号链接(symbolic link),我不确定会发生什么。)

至于为什么只有这三个特定目录给您带来问题:我敢猜测您在不同的用户名下进行了几次提交和/或提取(也许您说 sudo git fetch origin等等,例如),并且作为这样做的一部分创建的文件/目录归该用户所有。您可能想检查原始目录中的这些目录,看看它们有什么不同 - 完全有可能不保留它们的权限在这里是一件的事情,并且实际上使 exFAT 副本比原始副本更正确.


* “ block ”和“集群”基本上是一回事。但是 MS —— 以及它提供的关于基于 FAT 的文件系统的任何文档 —— 喜欢称它们为“集群”。

关于git - 为什么在 exFAT 上复制的 git 文件夹的大小比在 ext4 上的原始文件夹大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com