回答:
おそらく、「デバイスにスペースが残っていません」というエラーが表示されます。
# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device
そして実際には、「40億ファイル」よりもずっと早くこの制限に達しています。両方df -h
でファイルシステムをチェックし、df -i
残っている空き容量を確認してください。
# df -h loop/
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 93M 2.1M 84M 3% /dev/shm/loop
# df -i loop/
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop0 25688 25688 0 100% /dev/shm/loop
この例では、ファイルのサイズが平均で4Kでない場合、ストレージスペースよりもはるかに早くiノードスペースが不足します。それは別の比率を指定することが可能です(mke2fs -N number-of-inodes
または-i bytes-per-inode
または-T usage-type
で定義されています/etc/mke2fs.conf
)。
git repack
、各gitリポジトリで実行して、個別のオブジェクトをすべてパックファイルに結合してみてください。
touch
、空想echo
ではなく、重要な点とよくある誤解も示します。空のファイルでディスクをいっぱいにすることは可能です。
git repack
は機能を失うことはなく、機能的には同じgitリポジトリでありtar
、プロジェクトまたはgitリポジトリを必要とする多くのプログラムで読み取り不能になります
制限に達すると、以降のファイル作成の試行はで失敗しENOSPC
、ターゲットファイルシステムに新しいファイル用のスペースがないことを示します。
あなたが説明するシナリオでは、これは通常、制限に達すると転送が中断される結果になります。