find / ls / stat 및 df로 디스크 사용량을 정확하게 예측합니까?


0

드라이브에 맞는 파일 수를 프로그래밍 방식으로 계산하려고합니다. 드라이브는 LUKS / ext4를 사용하며 블록 크기는 4096입니다. 아래는 드라이브의 df 출력입니다.

Filesystem                       1K-blocks  Used       Available Use% Mounted on
/dev/mapper/vg_server-lv_storage 7260987808 6258809672 633341120 91% /storage

내가 겪고있는 문제는 파일 이이 디스크에서 차지하는 공간을 정확하게 계산하는 명령을 찾는 것입니다. 예를 들면 다음과 같습니다.

[root@server ~]# ls -l test.t
-rw-r--r-- 1 root root 2 May 27 11:34 test.t

[root@server ~]# ls -l test2.t
-rw-r--r-- 1 root root 6301 Jul 18  2011 test2.t

"ls"는 2 바이트와 6301 바이트를보고합니다.

[root@server ~]# stat test.t
  File: `test.t'
  Size: 2               Blocks: 8          IO Block: 4096   regular file
Device: fd03h/64771d    Inode: 20185186    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-05-27 11:34:55.244368861 -0400
Modify: 2013-05-27 11:34:47.560446365 -0400
Change: 2013-05-27 11:34:47.654445417 -0400

[root@server ~]# stat test2.t
  File: `test2.t'
  Size: 6301            Blocks: 16         IO Block: 4096   regular file
Device: fd05h/64773d    Inode: 177345663   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-05-27 11:06:28.363664283 -0400
Modify: 2011-07-18 16:18:56.000000000 -0400
Change: 2013-05-12 17:05:09.968897077 -0400

"stat"는 사용중인 8 개의 블록 (512 단위로 8 * 512 = 4096)과 16 개의 블록 (8192)을보고합니다.

[root@server ~]# find . -xdev -printf '%p %k %b\n' |grep test.t
./test.t 4 8

[root@server ~]# find . -xdev -printf '%p %k %b\n' |grep test2.t
./test2.t 8 16

"find"는 4K / 8 블록 (512 개의 incremennt, 따라서 4096) 및 8K / 16 블록을보고합니다. 여태까지는 그런대로 잘됐다.

사용 가능한 1K 블록 (위의 7260987808)을 결정하기 위해 사용중인 명령 인 "df"는 두 번째 테스트에 대해 다른 숫자를보고합니다.

[root@server ~]# /bin/df -P |grep lv_storage; cp /root/test.t /storage/ttt.txt;/bin/df -P |grep lv_storage; rm /storage/ttt.txt; /bin/df -P |grep lv_storage;
/dev/mapper/vg_server-lv_storage 7260987808 6258809672 633341120      91% /storage
/dev/mapper/vg_server-lv_storage 7260987808 6258809680 633341112      91% /storage
/dev/mapper/vg_server-lv_storage 7260987808 6258809672 633341120      91% /storage

[root@server ~]# /bin/df -P |grep lv_storage; cp /root/test2.t /storage/ttt.txt;/bin/df -P |grep lv_storage; rm /storage/ttt.txt; /bin/df -P |grep lv_storage;
/dev/mapper/vg_server-lv_storage 7260987808 6258809672 633341120      91% /storage
/dev/mapper/vg_server-lv_storage 7260987808 6258809684 633341108      91% /storage
/dev/mapper/vg_server-lv_storage 7260987808 6258809672 633341120      91% /storage

첫 번째 파일에 대해 633341120-633341112 = 8이 표시됩니다.

그런 다음 첫 번째 파일에 대해 633341120-633341108 = 12를 표시합니다. 잘못된. 16이어야합니다.

나는 이것이 df의 문제라고 생각했다. 사람들이 드라이브를 채우지 못하도록하기위한 안전 보호 구역이지만 find의 % k를 사용하여 드라이브에 맞는 파일 수를 계산 한 다음 안전을 위해 일부 패딩을 뺀 것입니다. 드라이브를 가득 채우고 rsync에 오류가 발생했습니다.

참고로 % k는 다음과 같이 정의됩니다.

          %k     The amount of disk space used for this file in 1K blocks. Since disk space is allocated in multiples of the filesystem block size this is usually greater than %s/1024, but it can also be
                 smaller if the file is a sparse file.

어떤 아이디어?

답변:


0

귀하의 질문을 올바르게 이해하면 서버에 얼마나 많은 파일을 넣을 수 있는지를 목표로합니다.

이 서버는 아직 프로덕션 환경에 있지 않은 것 같습니다. 드라이브에 여러 개의 정크 파일을 채우고 계산합니다.

df -i가 100 %를 제공하면 최대 값에 도달 한 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.