
Итак, это касается iPad Pro, но я спрашиваю вас, потому что речь идет о базовой системе Unix, лежащей в основе iOS/OS X, а не о конкретном iPad.(И да, я сначала потратил часы на чтение всех соответствующих статей StackExchange о том, что «на устройстве не осталось места».)
Проблема №1:Я не могу создавать файлы больше 2-8 МБ (это меняется после перезагрузки). Это делает iPad практически непригодным для использования.Многие приложения не запускаются, приложения не устанавливаются и т. д. Этосообщает «на устройстве не осталось места» при попытке создать файл размером больше странного лимита в 2–8 МБ, несмотря на наличие гигабайт свободного места.
Проблема №2:Место на диске постоянно исчезает. Я продолжал удалять приложения (до того, как началась эта проблема «на устройстве не осталось места»), и сколько бы я ни удалял, через несколько дней оно действовало как полное. Сначала оно действовало как полное при свободном 1 ГБ. Затем, через несколько недель, оно в конечном итоге стало 2 ГБ, затем 3...4... 6...8... и в конечном итоге даже при свободных 9 ГБ устройство все еще действовало как полное! Так что я знал, что ОГРОМНЫЙ объем дискового пространства был неучтен, потому что я удалил десятки гигабайт приложений.
Ускоряющий инцидент: Несколько месяцев назад произошло нечто катастрофическое, когда у меня было законно очень мало места на диске, и я попытался обновить несколько приложений одновременно. iPad завис, и несколько системных баз данных были повреждены, и iPad начал просить меня снова установить определенные пароли и т. д. С тех пор у меня были различные проблемы с ним, но в основном я мог им пользоваться. До прошлой недели!
В итоге я сделал джейлбрейк iPad, потому что я уже на грани отчаяния и мне придется стереть все данные с устройства, если я не смогу решить эту проблему, а мне просто ОЧЕНЬ хотелось запустить джейлбрейк."ду -х -д 1"чтобы увидеть, ЧТО именно занимало около 60 ГБ недостающего пространства!!
Я запустил fsck_hfs на диске (что было невероятно сложно сделать!!) и КОНЕЧНО ЖЕ, он сказал что-то вроде2 миллиона блоков бесплатно - должно быть 16 миллионов, и я сделал расчеты, и это имело смысл! Fsck завершился и перезагрузился и БАЦ! Внезапно мое пропавшее место вернулось, и у меня есть71 ГБ бесплатно!
Но примерно в это время проблема стала настолько серьезной, что я не мог создавать файлы больше 2-8 МБ. Я буквально запустил:
dd if=/dev/zero of=testfile.bin bs=1M count=10
..и он даст сбой при достижении определенного числа, которое почти всегда является идеальной степенью 2 в МиБ (например, 2, 4 или 8 МиБ) с сообщением «На устройстве не осталось места». НО Я ВСЕГДА МОГУ ЗАПИСАТЬ СТОЛЬКО ФАЙЛОВ ТАКОГО РАЗМЕРА, СКОЛЬКО ЗАХОЧУ! Допустим, сегодня ограничение составляет 4,0 МиБ. Я могу выполнять эту команду DD с инкрементными именами файлов снова и снова. Я делал это 7 раз подряд, создавая 7 файлов, и каждый раз это работало идеально. Если я делал 4,1 МиБ, он даст сбой. Хотя я только что создал 7x4 (32 МиБ) файлов!
И ВСЕ РАВНО место на диске ПРОДОЛЖАЕТ уменьшаться само по себе, сегодня утром свободно осталось всего 39 ГБ.Если я снова выполню fsck_hfs, объем свободного места вернется к отметке ~70 ГБ и снова начнет медленно уменьшаться.
Я в растерянности. ПростоКАК устройство может выдавать ошибку «На устройстве не осталось места», когда на нем свободно десятки ГБ?У iPad есть только 1 диск, разделенный на раздел 4 ГБ /System и остальное на /private/var. Мой раздел System заполнен всего на 75%, что нормально для любого устройства iOS.
Я даже проверил иноды с помощью df, и на диске данных (/dev/disk0s1s2) оказалось около 4 миллиардов свободных инодов.
Вот несколько соответствующих распечаток (за разные дни):
iPad:/private root# df
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/disk0s1s1 9316200 6795912 2427128 74% 125137 4294842142 0% /
devfs 99 99 0 100% 172 0 100% /dev
/dev/disk0s1s2 486135960 476137152 9998808 98% 1217291 4293749988 0% /private/var
iPad:/private root# df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk0s1s1 4.4Gi 3.2Gi 1.2Gi 74% 125137 4294842142 0% /
devfs 50Ki 50Ki 0Bi 100% 172 0 100% /dev
/dev/disk0s1s2 232Gi 227Gi 4.8Gi 98% 1217291 4293749988 0% /private/var
iPad-Pro-256GB:/sbin root# mount
/dev/disk0s1s1 on / (hfs, local, journaled, noatime)
devfs on /dev (devfs, local, nobrowse)
/dev/disk0s1s2 on /private/var (hfs, local, nodev, nosuid, journaled, noatime, protect)
iPad-Pro-256GB:~ root# pwd
/var/root
iPad-Pro-256GB:~ root# dd if=/dev/zero of=test3.bin bs=1M count=20
dd: error writing 'test3.bin': No space left on device
9+0 records in
8+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.671137 s, 12.5 MB/s
Отрывок из одного из первых fsck_hfs, который я запустил, когда на устройстве было свободно около 9 ГБ, а должно было быть 70 ГБ:
** Checking volume bitmap.
Volume bitmap needs minor repair for orphaned blocks
Volume bitmap needs repair for under-allocation
** Checking volume information.
Invalid volume free block count
(It should be 16884367 instead of 2063604)
Полностью успешный fsck_hfs:
iPad-Pro-256GB:/ root# umount -f /private/var && killall backboardd && fsck_hfs -f -y /dev/disk0s1s2
umount: /private/var: not currently mounted
iPad-Pro-256GB:/ root# fsck_hfs -f -y /dev/disk0s1s2
** /dev/rdisk0s1s2
Executing fsck_hfs (version hfs-366.30.3).
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
The volume name is Data
** Checking extents overflow file.
** Checking catalog file.
Incorrect size for file MediaLibrary.sqlitedb
(It should be 1343488 instead of 1564672)
** Checking multi-linked files.
** Checking catalog hierarchy.
** Checking extended attributes file.
** Checking volume bitmap.
Volume bitmap needs minor repair for orphaned blocks
** Checking volume information.
Invalid volume free block count
(It should be 16972349 instead of 14633343)
** Repairing volume.
Limited repair mode, not all repairs available
** Rechecking volume.
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
The volume name is Data
** Checking extents overflow file.
** Checking catalog file.
** Checking multi-linked files.
** Checking catalog hierarchy.
** Checking extended attributes file.
** Checking volume bitmap.
** Checking volume information.
** Trimming unused blocks.
** The volume Data was repaired successfully.
Примечания:
A. Ничего существенного в системном журнале, если не удаётся создать большие файлы.
B. Устройство: iPad Pro 9.7" 256 ГБ iOS 10.2.1 HFS (не APFS, которая была представлена позже в 10.3). Не подвергалось джейлбрейку ДО тех пор, пока не возникла эта проблема.
решение1
Если файловая система сильно фрагментирована, возможно, в ней много свободного места, но недостаточно места в больших блоках.
В вашем случае это выглядит так, как будто это может быть правдой для вашей файловой системы.
Фрагментация обычно происходит, если вы копируете множество небольших файлов в файловую систему, а затем удаляете случайную часть этих небольших файлов. Это освобождает фрагменты, которые нельзя рекомбинировать в более крупные блоки.
Раньше usenet news
файловая система обычно страдала от этой проблемы в случае, если вы копировали много статей на свой личный диск и использовали разное время хранения для разных групп новостей.
Если для этой файловой системы нет инструмента дефрагментации, вы можете скопировать (не перемещать) множество мелких файлов в другое место в файловой системе, а затем удалить старые версии мелких файлов. Если вы получите нужные файлы, делая это, есть большая вероятность, что освобожденные фрагменты совпадут, чтобы создать новые более крупные свободные блоки.