다양한 StackExchange 사이트의 다양한 답변이 이 주제의 일부를 다루고 있지만 이 시나리오와 정확히 일치하는 내용은 없습니다. 마운트된 각 표준 파일 시스템을 식별하고 모든 파일과 디렉터리를 반복하여 커널 inode 캐시를 준비하는 방법은 무엇입니까? 다음 제약 조건을 가정합니다.
- 정상적인 시작에는 영향을 미치지 않습니다.
- 정상적인 부팅 프로세스를 연장하지 않습니다.
- 기본 유틸리티나 매우 널리 사용되는 유틸리티만 사용하세요.
나는 내 전문 지식과 다른 답변의 아이디어를 결합하여 이 한 줄짜리를 만들었지만 완전히 안전하지 않고 특이한 문자가 있는 설치 대상을 벨팅하는 것과 같은 다양한 문제에 직면하지 않기 때문에 다른 쉘 골퍼가 이를 개선할 수 있다고 확신합니다.
findmnt --list --real --fstab --noheadings --output TARGET | egrep '^/' | xargs -P 0 -i bash -c 'find "{}" -xdev -type f,d,l -printf "" &>/dev/null &'
이 버전은 몇 가지 주의 사항과 함께 다음 단계를 수행합니다.
- 트리 형식이나 헤더 없이 표시된 실제 FS 유형을 사용하여 fstab에서 모든 마운트를 찾습니다. 이는 순회 중에 비정상적으로 동작하거나 RAM에 있어서 순회가 의미가 없는 가상 FS를 제외합니다.
- 노트:
none
egrep을 사용하지 않고 스왑 파티션과 같은 대상 fstab 항목을 건너뛰는 깔끔한 방법을 찾을 수 없습니다 . 한 번의 호출에서findmnt
포함 필터와 제외 필터를 혼합할 수 없으며 (find
더 일반적이고 이를 수행할 수 있는 필터와는 달리), 내가 아는 한rsync
여러 호출에 걸쳐 필터링을 분할하는 좋은 방법은 없습니다.findmnt
- 다른 탑재 대상을 순회하지 않고 각 탑재 대상의 모든 디렉터리, 파일 또는 심볼릭 링크에 대해 무제한 병렬 순회를 수행하고
find
, 콘솔 소음이나 시작 지연을 방지하기 위해 백그라운드에서 가능한 모든 출력을 억제하고 무시합니다.xargs ... bash ...
일부(전부는 아님) 특이한 문자에 대한 안전을 위해 사용됩니다. - 에 명령을 넣으면
/etc/rc.local
최신systemd
배포판에 기본적으로 포함되어 있지 않더라도 해당 명령이 실행됩니다(존재하고 실행 가능한 경우)rc.local
.rc-local.service
이와 같은 사소한 일을 수행하기 위해 더 많은 구성 파일과 스크립트 파일을 사용하는 것보다 더 깨끗해 보이지만 더 좋은 방법이 있을까요?