폴더를 다시 만들지 않고 폴더 메타데이터 크기를 재설정하는 방법은 무엇입니까?

폴더를 다시 만들지 않고 폴더 메타데이터 크기를 재설정하는 방법은 무엇입니까?

폴더( watch)에 다수의 임시 파일이 잘못 채워져 있습니다. 파일을 모두 지웠는데 폴더 크기가 여전히 356kB입니다. 이전에는 폴더를 다른 곳으로 옮기고 같은 이름의 새 폴더를 만든 다음 모든 파일을 그 폴더에 복사하여 이전의 작은 크기로 되돌렸습니다. 폴더를 다시 만들지 않고 더 작은 크기로 되돌릴 수 있는 방법이 있나요?

drwxr-xr-x 2 apache apache   4096 Nov 29  2014 details
drwxr-xr-x 2 apache apache 364544 Jan 21 17:24 watch
drwxr-xr-x 3 apache apache   4096 Jan 21 17:19 settings

watch.htaccess와 index.php라는 두 개의 작은 파일이 있습니다.

ext4 파일 시스템이 있습니다.

답변1

e4fsck-D원하는 대로 작동하는 것처럼 보이는 지원 플래그:

파일 시스템이 디렉터리 인덱싱을 지원하는 경우 디렉터리를 다시 인덱싱하거나 더 작은 디렉터리 또는 기존 선형 디렉터리를 사용하는 파일 시스템에 대해 디렉터리를 정렬 및 압축하여 모든 디렉터리를 최적화해 보십시오.

물론, 파일 시스템을 사용하려면 마운트를 해제해야 합니다 fsck. 이는 서버가 다운된다는 의미입니다.

파일 시스템이 깨끗하더라도 파일 시스템이 처리되도록 -f하려면 이 옵션을 사용해야 합니다 .e4fsck

시험:

# truncate -s1G a; mkfs.ext4 -q ./a; mount ./a /mnt/1
# mkdir /mnt/1/x; touch /mnt/1/x/{1..4000}
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:54 /mnt/1/x/
# rm -f /mnt/1/x/*
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:55 /mnt/1/x/
# umount /mnt/1
# e2fsck -f -D ./a
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 3A: Optimizing directories
Pass 4: Checking reference counts
Pass 5: Checking group summary information

./a: ***** FILE SYSTEM WAS MODIFIED *****
./a: 12/65536 files (0.0% non-contiguous), 12956/262144 blocks
# mount ./a /mnt/1
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 4096 Nov 22 12:55 /mnt/1/x/

답변2

귀하의 질문에 대한 대답은 모든 실제적인 목적을 위해아니요. ext4는 디렉터리를 자르지 않으므로 디렉터리를 다시 만들어야 합니다. 파일을 새 디렉터리로 복사하는 대신 이동하여 이전 기술을 향상시킬 수 있습니다. 그러면 훨씬 더 빠르고 파일의 ctime만 변경됩니다.

하위 디렉터리가 없으면 ln파일을 새 디렉터리에 하드 링크할 수도 있습니다.

Linux에는 renameat2두 개의 이름을 바꾸는 데 사용할 수 있는 시스템 호출이 있으므로 다시 하위 디렉터리가 없다고 가정하고 새 디렉터리를 만들고 이전 디렉터리의 파일을 새 디렉터리에 연결한 다음 이전 디렉터리와 새 디렉터리를 바꿀 수 있습니다. 디렉토리. 구글이 빨리 알아냈어https://gist.github.com/eatnumber1/f97ac7dad7b1f5a9721frenameat2를 호출하는 샘플 코드입니다.

물론 모든 것은 데이터일 뿐이므로 그런 것을 사용할 수도 debugfs있고 dd디스크에서 직접 데이터 구조를 편집할 수도 있습니다. 단지 360KB의 공간을 위해 이 경로를 사용하는 것은 권장하지 않습니다.

답변3

를 사용하면 vim디렉토리를 "편집"할 수 있습니다. 제외하고 모두 ./삭제../

내 다운로드 디렉토리는 12k입니다

vim Downloads/

" ============================================================================                                                                                                                                            
" Netrw Directory Listing                                        (netrw v150)
"   /home/harry/Downloads
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
" ============================================================================
../
./
Documents/
LeapDeveloperKit_2.3.1+31549_linux/
Leap_Motion_Installer_Packages_release_public_linux/
Moderncv Casual/
OneDrive-2015-11-24/
Resume/
g13-gui/
jpegs/
markdown-notes-linux-x64/
pebble_js_tutorial_1_1/
pios/
teamviewerqs/
xampp-linux-x64-5.6.14-4-installer.run*
.swo
1452760968416.jpg
1a412bb33cb0a60077579b8bc13b2237.log.gz
....

다음은 일반적인 4k 디렉토리의 예입니다. vim Videos/

" ============================================================================                                                                                                                                       
" Netrw Directory Listing                                        (netrw v150)
"   /home/harry/Videos
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
"  ============================================================================
../
./
EnVyUs vs NiP, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group B-O3pBF-3KmzM.mp4
The Tek 0201 - Is USA Like Nazi Germany-zrOo8LzvKvc.mp4
The Tek 0203 - YT Red, EU Net Neutrality Trouble, Drones Taking  Jobs-IEdUcjBGyEw.mp4.part
The Tek 0204 - Logan's Favorite Episode of the Year-iga7kB1NhKY.mp4
VP vs TSM, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group A Winners Match-3jfepl5Of0o.mp4
.swp

제가 이해한 바에 따르면 Linux(또는 *Nix) 아래의 디렉터리는 "아래" 파일에 대한 정보를 저장하는 "특수" 파일일 뿐입니다. 내 시스템에서 vim이 작업을 수행하는 유일한 방법은 nano다른 방법을 사용하여 빈 파일을 표시하는 것입니다. 내용을 다르게 읽는 것 같습니다.

이것은 Linux에서 폴더(디렉토리)가 무엇인지 대답하는 좋은 스택 교환 질문입니다. Unix 파일 시스템에서 디렉토리는 어떻게 구현됩니까?

관련 정보