부팅 후 커널 inode 캐시를 채우는 깔끔한 방법은 무엇입니까?

부팅 후 커널 inode 캐시를 채우는 깔끔한 방법은 무엇입니까?

다양한 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 &'

이 버전은 몇 가지 주의 사항과 함께 다음 단계를 수행합니다.

  1. 트리 형식이나 헤더 없이 표시된 실제 FS 유형을 사용하여 fstab에서 모든 마운트를 찾습니다. 이는 순회 중에 비정상적으로 동작하거나 RAM에 있어서 순회가 의미가 없는 가상 FS를 제외합니다.
  2. 노트:noneegrep을 사용하지 않고 스왑 파티션과 같은 대상 fstab 항목을 건너뛰는 깔끔한 방법을 찾을 수 없습니다 . 한 번의 호출에서 findmnt포함 필터와 제외 필터를 혼합할 수 없으며 ( find더 일반적이고 이를 수행할 수 있는 필터와는 달리), 내가 아는 한 rsync여러 호출에 걸쳐 필터링을 분할하는 좋은 방법은 없습니다.findmnt
  3. 다른 탑재 대상을 순회하지 않고 각 탑재 대상의 모든 디렉터리, 파일 또는 심볼릭 링크에 대해 무제한 병렬 순회를 수행하고 find, 콘솔 소음이나 시작 지연을 방지하기 위해 백그라운드에서 가능한 모든 출력을 억제하고 무시합니다. xargs ... bash ...일부(전부는 아님) 특이한 문자에 대한 안전을 위해 사용됩니다.
  4. 에 명령을 넣으면 /etc/rc.local최신 systemd배포판에 기본적으로 포함되어 있지 않더라도 해당 명령이 실행됩니다(존재하고 실행 가능한 경우) rc.local. rc-local.service이와 같은 사소한 일을 수행하기 위해 더 많은 구성 파일과 스크립트 파일을 사용하는 것보다 더 깨끗해 보이지만 더 좋은 방법이 있을까요?

관련 정보