busybox chmod 03755는 디렉터리 권한이 올바르게 설정된 경우 디스크 쓰기 I/O를 생성합니까?

busybox chmod 03755는 디렉터리 권한이 올바르게 설정된 경우 디스크 쓰기 I/O를 생성합니까?

임베디드 Linux 설치에서 실행되는 데몬의 시작 스크립트를 작성 중입니다. 이는 chmodBusyBox v1.24.2에서 가져온 것임을 의미합니다.

플래시 미디어에 불필요한 쓰기 주기가 발생하는 것을 원하지 않습니다.

그렇기 때문에 디렉토리에서 (with )를 실행하면 chmod 03755디스크 쓰기 I/O가 발생하는지 궁금합니다.umask 022

즉, 디렉터리 권한이 올바르게 설정되었는지 확인하고 권한이 올바르지 않은 경우에만 chmod를 수행해야 합니까?

chmod또는 busybox가 권한 을 확인하지 않기 때문에 디렉토리 권한 확인은 노력 낭비입니다.모든 디스크 쓰기 I/O권한에 변경이 필요하지 않은 경우는 언제입니까?

답변1

chmod 03755파일에 작업을 수행하는 것을 의미합니다 chmod("file", 03755). 그러면 해당 작업에 대한 권한이 있는지 확인하고 가능하면 실행합니다(그렇지 않으면 오류 반환). 그러면 최소한 파일의 ctime이 업데이트됩니다. 생성할 감사기록 등

busybox가 필요한지 확인하기 위해 애쓰는 경우 ctime이 업데이트되지 않으며 이는 버그입니다. 이는 또한 버그가 될 수 있는 작업의 원자적 특성을 제거합니다.

따라서 즉시 완료되지 않더라도 저장 장치에 일부 관련 쓰기가 발생합니다.

그래서 직접 확인을 해봐야 합니다.

stat귀하의 busybox 버전에서 이 애플릿이 활성화된 경우 :

[ "$(stat -Lc%a file)" = 3755 ] || chmod 3755 file

답변2

현재로서는 이상적이지 않은 해결책은 명령 전후의 쓰기 수를 인쇄하는 것입니다.

첫째로, 나는디스크 쓰기 캐싱 비활성화:

# hdparm -W 0 /dev/sda

그런 다음 다음을 반복하여 다른 프로세스에서 디스크 쓰기를 제외해 보았습니다.커널 디스크 통계여러 번 명령하십시오.

# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725
# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725
# cat /sys/block/sda/stat | awk '{ print $5 }';chmod 03755 /opt/etc/tinydns;cat /sys/block/sda/stat | awk '{ print $5 }'
1725
1725

이 경우에는 chmod디스크 출력/쓰기 활동이 발생하지 않는 것 같습니다.

답변3

해당 파일에서 "strace chmod 03755"를 사용하여 이를 찾을 수 있습니다. busybox 이미지에 strace를 추가했을 수 있습니다.

관련 정보