70GB의 여유 공간이 있음에도 불구하고 "기기에 남은 공간이 없습니다"; iPad에서는 8.0MiB보다 큰 파일을 생성할 수 없습니다.

70GB의 여유 공간이 있음에도 불구하고 "기기에 남은 공간이 없습니다"; iPad에서는 8.0MiB보다 큰 파일을 생성할 수 없습니다.

좋아요, 이것은 아이패드 프로에 관한 것입니다. 하지만 이것은 실제로 아이패드에 국한된 것이 아니라 iOS/OS X 뒤에 있는 기본 유닉스 시스템에 관한 것이기 때문에 여러분께 묻고 싶습니다.(그렇습니다. 먼저 "장치에 남은 공간이 없습니다"에 대한 모든 관련 StackExchange를 읽는 데 몇 시간을 보냈습니다.)

문제 #1:2~8MB보다 큰 파일을 만들 수 없습니다(재부팅 시 달라짐). 이로 인해 iPad를 사실상 사용할 수 없게 됩니다.많은 앱이 실행되지 않거나 앱이 설치되지 않습니다.엄청난 여유 공간이 있음에도 불구하고 기괴한 2-8MB 제한보다 큰 파일을 생성하려고 하면 "장치에 남은 공간이 없습니다"라고 보고합니다.

문제 #2:디스크 공간이 계속해서 사라지고 있습니다.. 나는 계속해서 앱을 제거했고(이 "기기에 남은 공간 없음" 문제가 시작되기 전에) 아무리 많이 삭제해도 며칠 후에는 완전히 작동했습니다. 처음에는 1GB 무료로 전체 작동했습니다. 그런 다음 몇 주에 걸쳐 결국 2GB가 되었고, 그 다음에는 3...4... 6...8...이 되었고 결국 9GB가 비어 있어도 장치는 여전히 가득 찬 것처럼 작동했습니다! 그래서 나는 수십 기가의 앱을 제거했기 때문에 엄청난 양의 디스크 공간이 설명되지 않았다는 것을 알았습니다.

촉발된 사건: 몇 달 전 디스크 공간이 매우 부족하여 여러 앱을 동시에 업데이트하려고 시도했을 때 치명적인 일이 발생했습니다. iPad가 정지되고 여러 시스템 데이터베이스가 손상되었으며 iPad에서 특정 비밀번호를 다시 설정하라는 메시지가 표시되기 시작했습니다. 그 이후로 저는 iPad에 다양한 문제가 있었지만 대부분 사용할 수 있었습니다. 지난주까지!

나는 어찌할 바를 모르고 아이패드를 탈옥했고, 문제를 해결할 수 없으면 장치를 지워야 했고, 정말 실행하고 싶었습니다."두 -h -d 1"대략 60GB의 누락된 공간을 소비하고 있는 것이 무엇인지 확인하려면!!

나는 드라이브에서 fsck_hfs를 실행했고(엄청나게 어려웠습니다!!) 물론이죠. 다음과 같은 내용이 나왔습니다.200만 개의 블록이 비어 있습니다. - 1,600만 개가 되어야 합니다., 그리고 계산을 했는데 완벽하게 이해가 됐어요! fsck가 완료되고 재부팅되었으며 BAM! 갑자기 없어졌던 공간이 다시 찾아와서71GB 무료!

그런데 그 무렵 문제가 너무 심각해져서 2~8MB보다 큰 파일을 만들 수 없게 되었습니다. 나는 문자 그대로 다음을 실행했습니다.

dd if=/dev/zero of=testfile.bin bs=1M count=10

..그리고 "장치에 남은 공간이 없습니다"와 함께 거의 항상 완벽한 MiB 전력 2(2, 4 또는 8MiB 등)인 특정 숫자에서 실패합니다. 하지만 언제든지 원하는 만큼 해당 크기의 파일을 더 많이 쓸 수 있습니다! 오늘 한도가 4.0MiB라고 가정해 보겠습니다. 증분 파일 이름을 사용하여 DD 명령을 계속해서 수행할 수 있습니다. 7개의 파일을 연속해서 7번 만들었고 매번 완벽하게 작동했습니다. 4.1MiB로 만들면 실패합니다. 방금 7x4(32MiB)의 파일을 생성했는데도 말이죠!

그리고 여전히 디스크 공간은 저절로 계속 줄어들고 있으며, 오늘 아침에는 여유 공간이 39GB로 줄었습니다.다시 fsck_hfs하면 ~70GB 여유 공간으로 돌아가고 다시 천천히 줄어들기 시작합니다.

나는 헤매고 있다. 단지수십 GB의 여유 공간이 있는 경우 장치에서 어떻게 "장치에 남은 공간 없음" 오류가 표시될 수 있나요?iPad에는 디스크가 1개만 있으며, 4GB /System 파티션과 나머지는 /private/var에 나누어져 있습니다. 내 시스템 파티션이 75%만 찼는데 이는 모든 iOS 장치에서 일반적인 현상입니다.

df를 사용하여 inode를 확인한 결과 데이터 디스크(/dev/disk0s1s2)에 사용 가능한 inode가 40억 개 정도 있습니다.

다음은 관련 인쇄물입니다(다양한 날짜의).

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

장치에 약 9GB의 여유 공간이 있었지만 70GB의 여유 공간이 있어야 했을 때 실행한 첫 번째 fsck_hfs 중 하나에서 발췌했습니다.

** 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. 대용량 파일 생성에 실패하면 syslog와 관련된 내용이 없습니다.

B. 장치: iPad Pro 9.7" 256GB iOS 10.2.1 HFS(나중에 10.3에 도입된 APFS 아님). 이 문제가 시작된 후 오랫동안 탈옥하지 마십시오.

답변1

파일 시스템이 매우 조각화되어 있는 경우 여유 공간은 많지만 더 큰 블록에는 충분한 공간이 없을 수 있습니다.

귀하의 경우는 귀하의 파일 시스템에서 이것이 사실일 수 있는 것처럼 보입니다.

조각화는 일반적으로 많은 작은 파일을 파일 시스템에 복사한 다음 이러한 작은 파일 중 임의의 부분을 제거하는 경우 발생합니다. 이렇게 하면 더 큰 블록으로 재결합할 수 없는 조각이 해제됩니다.

이전에는 usenet news많은 기사를 개인 디스크에 복사하고 다양한 뉴스 그룹에 대해 서로 다른 보관 시간을 사용한 경우 파일 시스템에서 일반적으로 이 문제가 발생했습니다.

이 파일 시스템에 대한 조각 모음 도구가 없는 경우 많은 작은 파일을 파일 시스템의 다른 위치로 복사(이동 아님)한 다음 작은 파일의 이전 버전을 제거할 수 있습니다. 이 작업을 수행하는 동안 올바른 파일을 얻으면 해제된 조각이 서로 맞아서 더 큰 새 여유 블록을 생성할 가능성이 큽니다.

관련 정보