OCFS2 파티션에서 사용된 inode의 수는 약 2,800만 개에 달하는 것으로 나타났습니다. 518K 파일이 담긴 폴더를 옮겼더니 그 수가 2,200만 개가 되었습니다.
다음 스크립트는 약 65,000개의 파일 수와 40개의 폴더 수를 찾습니다.
제 질문은 2,200만이라는 숫자가 어디서 나오는 걸까요? 이게 정상인가요?
[root@bopapp1 ~]# cat /etc/issue
Oracle Linux Server release 6.5
Kernel \r on an \m
[root@bopapp1 ~]# uname -a
Linux bopapp1 3.8.13-16.2.1.el6uek.x86_64 #1 SMP Thu Nov 7 17:01:44 PST 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@bopapp1 ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg_testapp2-lv_root 3276800 765283 2511517 24% /
tmpfs 3089556 3 3089553 1% /dev/shm
/dev/sda1 128016 55 127961 1% /boot
/dev/mapper/vg_testapp2-lv_home 4882432 9662 4872770 1% /home
/dev/dm-4 39321087 22543323 16777764 58% /u
/dev/dm-5 26214055 8319457 17894598 32% /usr/oracle
[root@bopapp1 ~]# cd /u
[root@bopapp1 u]# for i in `find . -type d `; do echo `ls -a $i 2> /dev/null | wc -l` $i; done | sort -n | awk '{sum+=$1} END{print "sum=",sum}'
sum= 62950
답변1
여기서는 일반 디스크 로컬 파일 시스템이 아니라 OCFS2 클러스터 파일 시스템에 대해 이야기하고 있다는 것을 방금 깨달았습니다. 이 섹션은 특히 OCFS2에 적용됩니다. 아래의 공통 파일 시스템을 참조하세요.
새로운 빈 1GiB OCFS2 파일 시스템을 생성하고 마운트하면 사용된 inode 수가 36378로 표시됩니다.
100개의 빈 파일을 만든 후에는 이 숫자가 증가하는 것을 볼 수 없습니다.
10000개의 파일을 만든 후에는 72730으로 증가한 것을 볼 수 있습니다.
이 파일들을 모두 삭제해도 숫자는 줄어들지 않지만, FS를 제거하고 다시 설치하면 45634로 바뀌는 것을 볼 수 있습니다.
따라서 제가 이 파일 시스템에 익숙하지 않기 때문에 왜 IUsed
반환된 개수가 df
inode 수와 일치하지 않거나 inode가 해당 파일 시스템의 파일 이상의 용도로 사용되는지는 알 수 없습니다. 또는 시스템은 매우 대략적인 경우를 제외하고는 사용된 또는 사용 가능한 i-node 수를 추적하지 않습니다.
o2info --freeinode
ocfs2-tools 1.8.2 이상에서 실행 하면 예상에 가까운 숫자를 얻을 수 있습니다.
$ du -ax ///mnt/1 | grep -c ///
102
$ df -i /mnt/1
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/loop0 262144 45634 216510 18% /mnt/1
$ o2info --freeinode /mnt/1
Slot Space Free
0 10240 10129
1 0 0
Total 10240 10129
$ echo $((10240-10129))
111
$ touch /mnt/1/a{1..100}
$ o2info --freeinode /mnt/1
Slot Space Free
0 10240 10029
1 0 0
Total 10240 10029
$ o2info --freeinode /mnt/1 | awk 'END{print $2-$3}'
211
$ touch /mnt/1/b{1..20000}
$ o2info --freeinode /mnt/1
Slot Space Free
0 20480 259
1 0 0
Total 20480 259
$ o2info --freeinode /mnt/1 | awk 'END{print $2-$3}'
20221
이제 기존 파일 시스템의 경우...
디렉터리 항목을 크롤링하여 inode 수와 일치하는 항목을 찾으려면 inode 번호를 기준으로 표시되는 파일을 추적해야 합니다.
find /u -xdev -printf '%i\n' | sort -u | wc -l
du
(적어도 GNU 구현에서는) 동일한 파일(하드 링크)의 여러 인스턴스를 건너뛰므로 다음을 사용할 수 있습니다.
du -xa ///u | grep -c ///
이것 은 당신 에게 동일한 결과 를 줄 것입 니다 find
.
df -i
일부 파일 시스템(포함 ext4
)에는 내부적으로 사용되는 디렉터리에 연결되지 않은 일부 특수 inode가 있기 때문에 결과가 개수보다 약간 작을 것으로 예상했습니다 .
lsof +aL1 /u
또한 삭제되었지만 일부 프로세스에 의해 아직 열려 있는 파일( 목록은 참고자료 참조)과 그 안에 마운트된 다른 파일 시스템에 의해 차단된 파일(예제에서는 그렇지 않음) 도 계산하지 못합니다 .
`...`
당신처럼 명령 대체( )를 사용하는 것은 잘못되었습니다. 이는 기본적으로 공백을 분할하고 결과 단어에 대해 글로빙 작업을 수행하는 분할+글로브 연산자를 호출합니다. 따라서 파일 이름에 공백, 탭, 줄 바꿈 또는 문자가 포함되지 않은 경우에만 *
의미 있는 ?
결과가 제공됩니다 [
.
ls -a
.
항목 자체는 제외하고 이미 계산한 일부 inode에 대한 하드 링크이기 때문에 계산하지 않으려는 및 항목을 포함합니다 . 마찬가지로 다른 하드 링크도 여러 번 계산하게 됩니다...
.
/u
답변2
inf inode를 사용하지만 파일 시스템을 통과하는 사용자에게 표시되지 않는 열려 있지만 삭제된 파일이 있기 때문에 이러한 숫자를 일치시킬 수 없습니다.
명령으로 볼 수 없는 숨겨진 inode도 있습니다(예: ACL 정의 및 확장 속성 파일에서 사용) find
.
반면에 하드 링크를 여러 번 계산하지 않도록 해야 합니다. 이는 다음을 통해 달성할 수 있습니다.
find /u -xdev -ls | sort -n -u +0 | wc -l
그러나 이렇게 하면 파일 수가 너무 적어지는 경우가 많습니다(위 참조).