git gc: 设备上没有 space 剩余,即使可用空间为 3GB 而 tmp_pack 只有 16MB
git gc: no space left on device, even though 3GB available and tmp_pack only 16MB
> git gc --aggressive --prune=now
Counting objects: 68752, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (66685/66685), done.
fatal: sha1 file '.git/objects/pack/tmp_pack_cO6T53' write error: No space left on device
唉,还好
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 15G 3.0G 84% /
udev 485M 4.0K 485M 1% /dev
tmpfs 99M 296K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 494M 0 494M 0% /run/shm
cgroup 494M 0 494M 0% /sys/fs/cgroup
看起来还不错
ls -lh .git/objects/pack/
total 580M
-r--r--r-- 1 foouser root 12K Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.idx
-r--r--r-- 1 foouser root 5.1M Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.pack
-r--r--r-- 1 foouser root 5.1K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.idx
-r--r--r-- 1 foouser root 100K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.pack
-r--r--r-- 1 foouser root 11K Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.idx
-r--r--r-- 1 foouser root 2.6M Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.pack
-r--r--r-- 1 foouser root 1.6M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.idx
-r--r--r-- 1 foouser root 290M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.pack
-r--r--r-- 1 foouser root 40K Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.idx
-r--r--r-- 1 foouser root 6.1M Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.pack
-r--r--r-- 1 foouser root 1.6M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.idx
-r--r--r-- 1 foouser root 102M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.pack
-r--r--r-- 1 foouser root 1.6M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.idx
-r--r--r-- 1 foouser root 151M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.pack
-r--r--r-- 1 foouser root 4.7K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.idx
-r--r--r-- 1 foouser root 125K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.pack
-r--r--r-- 1 foouser root 6.2K Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.idx
-r--r--r-- 1 foouser root 4.2M Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.pack
-r--r--r-- 1 root root 16M Feb 27 08:19 tmp_pack_cO6T53
因此,git gc
在只有 16MB 大的 tmp 包上退出,而我的磁盘似乎有 3GB 可用空间。我错过了什么?如何让 git gc
更可靠地工作?我试过没有积极的选择和 --prune
而不是 --prune=now
,同样的故事。
更新
在重新打包操作期间执行 df -h 显示它现在正在使用我的所有磁盘(100% 使用率)。稍后,重新打包操作失败,并在 .git/objects/pack/ 文件夹中留下另一个 14MB 的文件。所以,回顾一下,我的包总共使用了 580MB。 git repack 以某种方式设法用完 3GB 来重新打包。顺便说一句,完成后我的 RAM 中有大约 800MB 的空闲空间。 - 也许它使用了太多的工作内存以至于阻塞了交换?我想我的问题归结为:是否有选项可以让 git 重新打包减少资源消耗?
版本:git Ubuntu 12.04
版本 1.7.9.5
更新 2
我已将 git 更新为 2.3。不幸的是没有改变任何东西。
> git --version
git version 2.3.0
> git repack -Ad && git prune
Counting objects: 68752, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (36893/36893), done.
fatal: sha1 file '.git/objects/pack/tmp_pack_N9jyVJ' write error: No space left on device
更新 3
好的,所以我刚刚注意到一些奇怪的事情:.git
目录实际上使用的磁盘 space 比之前报告的 508MB 多得多。
> du -h -d 1 ./.git
8.0K ./.git/info
40K ./.git/hooks
24M ./.git/modules
28K ./.git/refs
4.0K ./.git/branches
140K ./.git/logs
5.0G ./.git/objects
5.0G ./.git
进一步检查 .git/objects/pack
实际使用了 4.5GB。不同之处在于我之前没有注意到的隐藏临时文件:
ls -lha ./.git/objects/pack/
total 4.5G
drwxr-xr-x 2 foouser root 56K Feb 27 15:40 .
drwxr-xr-x 260 foouser root 4.0K Oct 26 14:24 ..
-r--r--r-- 1 foouser root 12K Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.idx
-r--r--r-- 1 foouser root 5.1M Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.pack
-r--r--r-- 1 foouser root 5.1K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.idx
-r--r--r-- 1 foouser root 100K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.pack
-r--r--r-- 1 foouser root 11K Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.idx
-r--r--r-- 1 foouser root 2.6M Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.pack
-r--r--r-- 1 foouser root 1.6M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.idx
-r--r--r-- 1 foouser root 290M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.pack
-r--r--r-- 1 foouser root 40K Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.idx
-r--r--r-- 1 foouser root 6.1M Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.pack
-r--r--r-- 1 foouser root 1.6M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.idx
-r--r--r-- 1 foouser root 102M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.pack
-r--r--r-- 1 foouser root 1.6M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.idx
-r--r--r-- 1 foouser root 151M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.pack
-r--r--r-- 1 foouser root 4.7K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.idx
-r--r--r-- 1 foouser root 125K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.pack
-r--r--r-- 1 foouser root 6.2K Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.idx
-r--r--r-- 1 foouser root 4.2M Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:37 .tmp-7729-pack-00447364da9dfe647c89bb7797c48c79589a4e44.idx
-r--r--r-- 1 root root 14M Feb 27 15:29 .tmp-7729-pack-00447364da9dfe647c89bb7797c48c79589a4e44.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:32 .tmp-7729-pack-020efaa9c7caf8b792081f89b27361093f00c2db.idx
-r--r--r-- 1 root root 41M Feb 27 15:30 .tmp-7729-pack-020efaa9c7caf8b792081f89b27361093f00c2db.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:37 .tmp-7729-pack-051980133b8f0052b66dce418b4d3899de0d1342.idx
(continuing for a *long* while).
现在我想知道:删除这些是否安全?
到目前为止,我发现的是:我在 .git/objects/pack
文件夹中找不到关于这些隐藏的“.tmp-XXXX-pack”的任何文档。我能找到的所有其他线程都是关于同一文件夹中带有 tmp_
前缀的 非隐藏 文件。隐藏的也显然是在重新包装操作期间创建的,并且它们也可能被卡住。我无法确认这在 git 2.3.0 中是否仍然可行(我已经更新到此),但至少磁盘 space 要求在这个新版本中似乎没有改变- 它仍然无法完成 gc/repack。通过删除这些 .tmp 文件,我能够恢复我最后的 4GB 并且 git 之后似乎仍然表现良好 - 但是你的结果可能会有所不同,所以 请确保你在执行此操作之前有一个备份。最后,即使是 4GB 也不足以用 gc --agressive
重新打包。清理后我的 .git
文件夹是 1.1GB,我的整个存储库是 1.7GB。因此,2 倍的存储库大小可能不足以 git gc
,即使使用积极的选项(应该节省 space)。所以我必须首先从其他地方恢复更多 space。
最后,这是我现在清理脚本中的内容(我认为从 cron 作业调用它可能是个好主意):
#!/bin/bash
set -e
#git gc or remove tmp if that fails (because out of disk space)
git gc --aggressive --prune=now || rm -f .git/objects/*/tmp_* && rm -f .git/objects/*/.tmp-*
类似的场景(大约 2.3G 可用),除了 git gc
本身也会失败 fatal: Unable to create '/home/ubuntu/my-app-here/.git/gc.pid.lock': No space left on device
有效的是先 git prune
,然后 运行 gc。
我有一个这个问题的例子。我能够释放大量磁盘 space,但是当然,这并没有解决如何处理 .tmp-* 文件的问题。我 运行 git fsck
和 Git 存储库没有以这种方式损坏。
我做了常规的pack-and-garbage-collect操作
git repack -Ad
git prune
但这并没有删除 .tmp-* 文件,尽管如果需要从 t运行过去崩溃的 Git 个进程遗留下来的 sient 文件。
最终我意识到我可以安全地将 .tmp-* 文件移动到临时目录,然后 运行 git fsck
看看 .git 目录中是否还有剩余的内容完全的。原来是这样,所以我删除了scratch目录和它包含的文件。如果 git fsck
报告了问题,我可以将 .tmp-* 文件移回 .git 目录并研究另一个解决方案。
> git gc --aggressive --prune=now
Counting objects: 68752, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (66685/66685), done.
fatal: sha1 file '.git/objects/pack/tmp_pack_cO6T53' write error: No space left on device
唉,还好
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 15G 3.0G 84% /
udev 485M 4.0K 485M 1% /dev
tmpfs 99M 296K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 494M 0 494M 0% /run/shm
cgroup 494M 0 494M 0% /sys/fs/cgroup
看起来还不错
ls -lh .git/objects/pack/
total 580M
-r--r--r-- 1 foouser root 12K Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.idx
-r--r--r-- 1 foouser root 5.1M Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.pack
-r--r--r-- 1 foouser root 5.1K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.idx
-r--r--r-- 1 foouser root 100K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.pack
-r--r--r-- 1 foouser root 11K Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.idx
-r--r--r-- 1 foouser root 2.6M Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.pack
-r--r--r-- 1 foouser root 1.6M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.idx
-r--r--r-- 1 foouser root 290M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.pack
-r--r--r-- 1 foouser root 40K Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.idx
-r--r--r-- 1 foouser root 6.1M Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.pack
-r--r--r-- 1 foouser root 1.6M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.idx
-r--r--r-- 1 foouser root 102M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.pack
-r--r--r-- 1 foouser root 1.6M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.idx
-r--r--r-- 1 foouser root 151M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.pack
-r--r--r-- 1 foouser root 4.7K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.idx
-r--r--r-- 1 foouser root 125K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.pack
-r--r--r-- 1 foouser root 6.2K Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.idx
-r--r--r-- 1 foouser root 4.2M Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.pack
-r--r--r-- 1 root root 16M Feb 27 08:19 tmp_pack_cO6T53
因此,git gc
在只有 16MB 大的 tmp 包上退出,而我的磁盘似乎有 3GB 可用空间。我错过了什么?如何让 git gc
更可靠地工作?我试过没有积极的选择和 --prune
而不是 --prune=now
,同样的故事。
更新
在重新打包操作期间执行 df -h 显示它现在正在使用我的所有磁盘(100% 使用率)。稍后,重新打包操作失败,并在 .git/objects/pack/ 文件夹中留下另一个 14MB 的文件。所以,回顾一下,我的包总共使用了 580MB。 git repack 以某种方式设法用完 3GB 来重新打包。顺便说一句,完成后我的 RAM 中有大约 800MB 的空闲空间。 - 也许它使用了太多的工作内存以至于阻塞了交换?我想我的问题归结为:是否有选项可以让 git 重新打包减少资源消耗?
版本:git Ubuntu 12.04
版本 1.7.9.5更新 2 我已将 git 更新为 2.3。不幸的是没有改变任何东西。
> git --version
git version 2.3.0
> git repack -Ad && git prune
Counting objects: 68752, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (36893/36893), done.
fatal: sha1 file '.git/objects/pack/tmp_pack_N9jyVJ' write error: No space left on device
更新 3
好的,所以我刚刚注意到一些奇怪的事情:.git
目录实际上使用的磁盘 space 比之前报告的 508MB 多得多。
> du -h -d 1 ./.git
8.0K ./.git/info
40K ./.git/hooks
24M ./.git/modules
28K ./.git/refs
4.0K ./.git/branches
140K ./.git/logs
5.0G ./.git/objects
5.0G ./.git
进一步检查 .git/objects/pack
实际使用了 4.5GB。不同之处在于我之前没有注意到的隐藏临时文件:
ls -lha ./.git/objects/pack/
total 4.5G
drwxr-xr-x 2 foouser root 56K Feb 27 15:40 .
drwxr-xr-x 260 foouser root 4.0K Oct 26 14:24 ..
-r--r--r-- 1 foouser root 12K Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.idx
-r--r--r-- 1 foouser root 5.1M Oct 30 05:47 pack-0301f67f3b080de7eb0139b982fa732338c49064.pack
-r--r--r-- 1 foouser root 5.1K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.idx
-r--r--r-- 1 foouser root 100K Oct 14 10:51 pack-27da727e362bcf2493ac01326a8c93f96517a488.pack
-r--r--r-- 1 foouser root 11K Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.idx
-r--r--r-- 1 foouser root 2.6M Oct 25 10:35 pack-4dce80846752e6d813fc9eb0a0385cf6ce106d9b.pack
-r--r--r-- 1 foouser root 1.6M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.idx
-r--r--r-- 1 foouser root 290M Apr 3 2014 pack-4dcef34b411c8159e3f5a975d6fcac009a411850.pack
-r--r--r-- 1 foouser root 40K Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.idx
-r--r--r-- 1 foouser root 6.1M Oct 26 11:53 pack-87529eb2c9e58e0f3ca0be00e644ec5ba5250973.pack
-r--r--r-- 1 foouser root 1.6M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.idx
-r--r--r-- 1 foouser root 102M Apr 19 2014 pack-9d5ab71d6787ba2671c807790890d96f03926b84.pack
-r--r--r-- 1 foouser root 1.6M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.idx
-r--r--r-- 1 foouser root 151M Oct 3 10:12 pack-af6562bdbbf444103930830a13c11908dbb599a8.pack
-r--r--r-- 1 foouser root 4.7K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.idx
-r--r--r-- 1 foouser root 125K Oct 20 11:02 pack-c0830d7a0343dd484286b65d380b6ae5053ec685.pack
-r--r--r-- 1 foouser root 6.2K Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.idx
-r--r--r-- 1 foouser root 4.2M Oct 2 15:38 pack-c20278ebc16273d24880354af3e395929728481a.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:37 .tmp-7729-pack-00447364da9dfe647c89bb7797c48c79589a4e44.idx
-r--r--r-- 1 root root 14M Feb 27 15:29 .tmp-7729-pack-00447364da9dfe647c89bb7797c48c79589a4e44.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:32 .tmp-7729-pack-020efaa9c7caf8b792081f89b27361093f00c2db.idx
-r--r--r-- 1 root root 41M Feb 27 15:30 .tmp-7729-pack-020efaa9c7caf8b792081f89b27361093f00c2db.pack
-r--r--r-- 1 root root 1.1K Feb 27 15:37 .tmp-7729-pack-051980133b8f0052b66dce418b4d3899de0d1342.idx
(continuing for a *long* while).
现在我想知道:删除这些是否安全?
到目前为止,我发现的是:我在 .git/objects/pack
文件夹中找不到关于这些隐藏的“.tmp-XXXX-pack”的任何文档。我能找到的所有其他线程都是关于同一文件夹中带有 tmp_
前缀的 非隐藏 文件。隐藏的也显然是在重新包装操作期间创建的,并且它们也可能被卡住。我无法确认这在 git 2.3.0 中是否仍然可行(我已经更新到此),但至少磁盘 space 要求在这个新版本中似乎没有改变- 它仍然无法完成 gc/repack。通过删除这些 .tmp 文件,我能够恢复我最后的 4GB 并且 git 之后似乎仍然表现良好 - 但是你的结果可能会有所不同,所以 请确保你在执行此操作之前有一个备份。最后,即使是 4GB 也不足以用 gc --agressive
重新打包。清理后我的 .git
文件夹是 1.1GB,我的整个存储库是 1.7GB。因此,2 倍的存储库大小可能不足以 git gc
,即使使用积极的选项(应该节省 space)。所以我必须首先从其他地方恢复更多 space。
最后,这是我现在清理脚本中的内容(我认为从 cron 作业调用它可能是个好主意):
#!/bin/bash
set -e
#git gc or remove tmp if that fails (because out of disk space)
git gc --aggressive --prune=now || rm -f .git/objects/*/tmp_* && rm -f .git/objects/*/.tmp-*
类似的场景(大约 2.3G 可用),除了 git gc
本身也会失败 fatal: Unable to create '/home/ubuntu/my-app-here/.git/gc.pid.lock': No space left on device
有效的是先 git prune
,然后 运行 gc。
我有一个这个问题的例子。我能够释放大量磁盘 space,但是当然,这并没有解决如何处理 .tmp-* 文件的问题。我 运行 git fsck
和 Git 存储库没有以这种方式损坏。
我做了常规的pack-and-garbage-collect操作
git repack -Ad
git prune
但这并没有删除 .tmp-* 文件,尽管如果需要从 t运行过去崩溃的 Git 个进程遗留下来的 sient 文件。
最终我意识到我可以安全地将 .tmp-* 文件移动到临时目录,然后 运行 git fsck
看看 .git 目录中是否还有剩余的内容完全的。原来是这样,所以我删除了scratch目录和它包含的文件。如果 git fsck
报告了问题,我可以将 .tmp-* 文件移回 .git 目录并研究另一个解决方案。