![폴더를 다시 만들지 않고 폴더 메타데이터 크기를 재설정하는 방법은 무엇입니까?](https://linux55.com/image/81915/%ED%8F%B4%EB%8D%94%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%EB%A7%8C%EB%93%A4%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%ED%8F%B4%EB%8D%94%20%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0%20%ED%81%AC%EA%B8%B0%EB%A5%BC%20%EC%9E%AC%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
폴더( 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 파일 시스템에서 디렉토리는 어떻게 구현됩니까?