df가 이 정보를 제공해야 한다는 것을 알고 있지만 df를 실행하면 사용 가능한 1k 블록 수가 표시되지만 내 파일 시스템은 4k 블록을 사용하고 있습니다.
물론 간단하게 4로 나눌 수도 있지만 세분성이 다르기 때문에 반드시 옳다고는 할 수 없습니다. 예를 들어 4개의 1k 파일은 1k 블록을 사용하는 파일 시스템에서 4개의 1k 블록을 사용하지만, 4개의 1k 파일은 4k 블록을 사용하는 파일 시스템에서 4개의 4k 블록을 사용합니다. (그러므로 4로 나누면 잘못된 답이 나옵니다.)
답변1
4K 파일 시스템 블록을 차지하는 1K 파일이 있는 경우 df
출력에 4K가 기여하게 됩니다.
df
이 숫자는 커널에 사용 가능한 블록 수를 요청하고( statfs
/ 사용 statvfs
) 이를 블록 크기 / 1024로 곱하여 계산됩니다.
4로 나누면 됩니다. 때로는 상황이 생각보다 간단할 때도 있습니다.
반면에 각 버전이 df
보고 단위로 1024바이트 블록을 사용한다고 가정해서는 안 됩니다. 때로는 512입니다.
답변2
흥미롭게도 다양한 버전에 설정된 옵션이 df
매우 다양합니다.
GNU를 사용하는 경우 df
(예:리눅스
df -B4K
), (또는 ) 라고 말하면 df -B4k
4KB 블록 크기를 보상할 수 있습니다.
~을 위한오픈BSDdf
그리고 맥OSXdf
, 환경 변수를 4096으로 설정하여 4KB 블록 크기를 사용하도록 BLOCKSIZE
지시합니다 .df
~을 위한솔라리스/usr/bin/df
이 -v
스위치를 사용하면 "파일 시스템에 할당된 총 블록 수, 기존 파일에 할당된 블록 수, [및] 권한 없는 사용자가 새 파일을 생성하는 데 사용할 수 있는 블록 수"와 같은 정보를 찾을 수 있습니다. 의 경우 -v
"크기는 지정된 각 파일 시스템에서 지원하는 가장 작은 블록 크기의 배수로 표시됩니다."
~을 위한AIXdf
스위치를 사용하여 -I
"총 블록 수, 사용된 공간, 여유 공간, 사용된 공간 비율 및 파일 시스템의 마운트 지점"을 확인합니다. (사용된 공간과 여유 공간의 단위가 실제로 어떤 단위인지 전혀 모르고 사용된 inode 수와 inode 비율을 표시하는 것 -I
외에 더 관련 있는 스위치도 보이지 않습니다 . AIX에서는 "Report Used" 비율이 블록과 사용된 블록 및 사용 가능한 블록의 수"는 Solaris의 동작과 유사합니다.-i
/usr/sysv/bin/df -v
/usr/bin/df -v
이것단일 UNIX 사양~을 위한df
df
Wikipedia에 명시된 대로 블록이나 inode에 결과를 표시하는 데 필요한 스위치가 없는 것 같습니다 .
답변3
POSIXdf
1024 또는 512바이트 단위만 사용할 수 있으므로 대답은 시스템별로 다르며 파일 시스템별로도 마찬가지일 가능성이 높습니다(다음과 같은 것은 무시하겠습니다).블록 재할당그리고인라인 데이터.)
가장 먼저 고려해야 할 개념은예약된 블록, 사양에 따르면 출력 여유 블록 수에는 df
예약된 블록이 포함되지 않습니다(일반적으로 루트용으로 예약되어 있지만 항상 그런 것은 아님).
(대부분) 이식 가능하고 사용하지 않는 찾기 방법은 선택한 출력 형식을 사용하여 df
Gnu 를 사용하는 것입니다 .stat
$ stat -fc "%n type=%T freeblk=%f totalblk=%b blksz=%S" /tmp
/tmp type=ext2/ext3 freeblk=99136 totalblk=494123 blksz=4096
계산에 사용된 대로 %a
(대신 %f
)을 사용하여 유효 여유 블록 수(즉, 예약된 블록 제외)를 출력 할 수 있습니다 .df
다른 시스템(*BSD)의 형식 지정 플래그 및 기능은 다양하며 stat
파일 시스템이 아닌 파일에만 적용될 수 있습니다. stat
POSIX가 아닌( stat()
POSIX 함수 및 에 대한 래퍼 statvfs()
), GNU 버전(핵심 도구가방) 휴대성이 매우 좋습니다.
ext2/3/4 기반 파일 시스템을 사용하면 다음 명령을 루트로 사용하여(또는 더 정확하게는 블록 장치 노드에 대한 읽기 액세스 권한으로) 이 정보를 덤프할 수 있습니다 tune2fs
.
# tune2fs -l /dev/sda3
tune2fs 1.42.8 (20-Jun-2013)
Filesystem volume name: <none>
Last mounted on: /var/spool
Filesystem UUID: 7b9d93dd-1322-4f54-a302-a0799f4518fb
Filesystem magic number: 0xEF53
[...]
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 7651328
Block count: 30588854
Reserved block count: 305888
Free blocks: 30060629
Free inodes: 7651317
First block: 0
Block size: 4096
Fragment size: 4096
[...]
이 방법은 파일 시스템이 마운트되었는지 여부에 관계없이 작동합니다.
답변4
디스크 블록 크기보다 작은(또는 훨씬 작은) 파일이 많은 경우 df 함수의 동작에 대한 유용한 정보입니다.
문제가 발생했습니다. df 함수는 다음을 알려줍니다.
Filesystem 1K-blocks Used Available Use% Mounted on
udev 89212 0 89212 0% /dev
tmpfs 24396 3236 21160 14% /run
/dev/mmcblk0p1 3583944 1926248 1593516 55% /
tmpfs 121980 0 121980 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 121980 0 121980 0% /sys/fs/cgroup
tmpfs 121980 4 121976 1% /tmp
/dev/zram1 49584 17836 28164 39% /var/log
tmpfs 24396 0 24396 0% /run/user/0
하지만 새 파일을 생성하는 중에 오류가 발생하면 더 이상 공간이 없습니다. 해결책은 "df -i"이며, 이는 디스크에서 점유된 블록을 반환합니다.
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 22303 338 21965 2% /dev
tmpfs 30495 523 29972 2% /run
/dev/mmcblk0p1 230144 230144 0 100% /
tmpfs 30495 1 30494 1% /dev/shm
tmpfs 30495 2 30493 1% /run/lock
tmpfs 30495 17 30478 1% /sys/fs/cgroup
tmpfs 30495 15 30480 1% /tmp
/dev/zram1 12800 34 12766 1% /var/log
tmpfs 30495 21 30474 1% /run/user/0
따라서 이는 디스크의 여유 공간/사용 공간이 더 많은 표시입니다. 테스트를 위해 4096Byte 크기의 블록을 채우기 위해 약 180,000개의 409Byte 크기 파일을 작성했기 때문에 간단한 "df" 디스크 사용량은 거의 변하지 않았지만 디스크가 꽉 찼습니다.