파일 시스템에서 사용 가능한 블록 수를 확인하는 방법은 무엇입니까?

파일 시스템에서 사용 가능한 블록 수를 확인하는 방법은 무엇입니까?

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 -B4k4KB 블록 크기를 보상할 수 있습니다.

~을 위한오픈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 사양~을 위한dfdfWikipedia에 명시된 대로 블록이나 inode에 결과를 표시하는 데 필요한 스위치가 없는 것 같습니다 .

답변3

POSIXdf1024 또는 512바이트 단위만 사용할 수 있으므로 대답은 시스템별로 다르며 파일 시스템별로도 마찬가지일 가능성이 높습니다(다음과 같은 것은 무시하겠습니다).블록 재할당그리고인라인 데이터.)

가장 먼저 고려해야 할 개념은예약된 블록, 사양에 따르면 출력 여유 블록 수에는 df예약된 블록이 포함되지 않습니다(일반적으로 루트용으로 예약되어 있지만 항상 그런 것은 아님).

(대부분) 이식 가능하고 사용하지 않는 찾기 방법은 선택한 출력 형식을 사용하여 dfGnu 를 사용하는 것입니다 .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파일 시스템이 아닌 파일에만 적용될 수 있습니다. statPOSIX가 아닌( 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" 디스크 사용량은 거의 변하지 않았지만 디스크가 꽉 찼습니다.

관련 정보