- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 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/
我试图将数据从我的 macbook 备份到外部硬盘驱动器 - 格式化为 exFat (因为 Windows 和 Linux/Mac 兼容)。 使用 Automator,我将创建一个小程序,以轻松备份我
我正在安装fuse-exfat并在安装时遇到以下错误,我执行了以下安装操作, git 克隆 https://github.com/relan/exfat.git cd exfat autoreconf
我在创建新的 sqlite 数据库时遇到了问题,它基本上可以正常工作,但是我们的一些三星 Galaxy S III 客户报告说在安装我们的应用程序后崩溃了。我们发现问题出在 sqlite 调用 wri
在 Linux 内核 5.12 版本中,使用 exFAT 文件系统的用户,在删除带有 “dirsync” 安装选项集的大文件时,将大幅提高速度。 exFAT(Extended File All
ubuntu挂载移动硬盘出现错误:mount:unknown filesystem type 'exfat' 处理方法如下: Ubuntu 13.10 或以上 安装exfat-
我需要一个函数来获取 Win7 或更高版本中所有类型系统驱动器的物理扇区大小。 这是我直到今天才使用的代码,当时我发现它无法与我的外部 USB HDD(exFAT 文件系统)和 USB MP3 播放器
我在 ext4 磁盘上有一个 git 文件夹(这是一个 git repo): ytsen@ytsen-MacBookPro:~$ du -hcs ~/git 3,2M /home/ytsen/g
Linux Mint 系统近日发布了 Linux Mint 20.1“Ulyssa” beta 版本,带来了诸多新功能。该系统基于 Ubuntu 20.04 设计,内核升级到Linux 5.4,桌面
我是一名优秀的程序员,十分优秀!