USB 드라이브에 대용량 파일을 쓸 때마다 쓰기 캐시로 인해 프로세스를 추적하기가 매우 어렵습니다. echo 1000000 > /proc/sys/vm/dirty_bytes
문제를 해결하는 것처럼 다양한 방법으로 비활성화할 수 있습니다 . 하지만 이전 설정을 다시 활성화(또는 재부팅)해야 합니다.
단일 쓰기 명령의 더티 바이트를 완전히 우회하도록 시스템에 지시하려면 어떻게 해야 합니까? 예를 들어 다음과 같습니다.
DIRTYBYTES=nope pv file.bin > /dev/sdb1
또는
pv file.bin | cache_buster > /dev/sdb1
설명: 현재 동작은 pv file.bin > /dev/sdb1
측정기가 즉시 100%에 도달한 다음 USB가 실제로 쓰기를 완료할 때까지 기다리면서 명령이 중단되는 것입니다. 대신, 명령을 수정하고 측정기를 USB 드라이브에 대한 대략적인 올바른 쓰기 속도로 점차적으로 늘리고 싶습니다.바뀌지 않는다더티 바이트 등은 다음 명령도 캐시를 우회하는 방식으로 설정됩니다.
답변1
sync
그리고watch-flush
캐싱을 허용할 수 있지만 이를 추적하세요. 결국 사용하는 데는 이유가 있고, 끄면 효율이 좀 떨어지거든요.
sync
한 가지 방법은 쓰기 프로세스가 완료된 후 버퍼 플러시를 시작하고 버퍼 크기를 모니터링하는 것입니다. 저는 쉘스크립트를 사용하여 watch-flush
버퍼의 크기, 지정된 "더티" 데이터를 모니터링합니다 grep Dirty: /proc/meminfo
. sync
작업이 완료되면 데이터가 드라이브에 완전히 기록되었음을 알 수 있습니다.
watch-flush
다음에 속하는 쉘스크립트에서 찾을 수 있습니다.mkusbu, 그대로 사용하거나 수정하거나 개념을 빌려 나만의 도구를 만들 수 있습니다.
dd
그리고fsync
사용하려는 경우 다른 옵션을 기반으로 dd
합니다 .conv=fsync
dd를 사용하여 ISO 이미지를 USB 플래시 드라이브에 쓸 때 스틱을 제거할 수 있는지 어떻게 알 수 있나요?
답변2
dd
나는 and 를 사용해 볼 것이다 oflag=direct status=progress
. 속도가 느려질 수 있습니다.
노력하다:
dd oflag=direct status=progress bs=16M if=file.bin of=/dev/sdb1
예상대로 작업이 완료되어야 합니다.