du
복사된 USB 드라이브에 기록되는 데이터의 양을 지속적으로 모니터링하는 데 사용합니다 .
원본 드라이브와 대상 드라이브의 디스크 사용량을 비교하고 사용자에게 복사 진행 상황을 표시합니다.
문제는 du
시스템 캐시에 여전히 많은 데이터가 있고 드라이브의 LED가 깜박이며 드라이브가 준비되지 않은 것을 확인했는데도 대상 드라이브에 데이터가 100% 존재한다고 보고한다는 것입니다. 제거됨.
나는 를 실행한 다음 rsync
사용자 가 대상 드라이브를 삭제하도록 하기 전에 데이터가 실제로 존재하는지 확인했습니다. 하지만 진행 상황을 모니터링할 수는 없습니다. 따라서 사용자는 드라이브가 실제로 동기화될 때까지 상황을 100% 볼 수 있습니다.sync
umount
sync
저는 "실제" 복사 진행 상황을 모니터링할 수 있기를 원합니다. 그것이 정말 중요하기 때문입니다. rsync
1GB 파일이 25초 안에 완전히 복사되는 것을 보는 것은 아무 소용이 없으며 sync
드라이브에 새로 고쳐질 때까지 5분을 더 기다려야 합니다( 나는 약간 과장했지만 무슨 뜻인지 알 것입니다.)
다음은 rsync
각 드라이브의 진행 상황을 모니터링하기 위해 반복하는 방법입니다.
PROGRESS="$(echo "$(du -s "/MEDIA/TARGET" 2>/dev/null | cut -f 1) / $(du -s "/MEDIA/SOURCE" 2>/dev/null | cut -f 1) " | bc -l)"
$PROGRESS
소스 드라이브 사용량과 대상 드라이브 사용량 간의 비율을 나타내는 0과 1 사이의 부동 소수점 숫자입니다.
시스템 캐시에서 대기하는 것이 아니라 이미 드라이브에 동기화된 데이터만 고려하도록 이를 어떻게 수정할 수 있습니까?
편집하다:
dd
시스템 캐시를 생략한 쓰기를 수행하는 것이 가능하다는 것을 알았습니다 . 테스트를 수행했고 실제로 이 방법으로 파일을 복사하면 du
실제 값이 보고되고 진행률 표시가 정확해졌습니다.
dd if=/media/SOURCE/file of=/media/TARGET/file bs=4M oflag=direct
이는 읽기 캐시를 사용하지만 쓰기 캐시를 비활성화하므로 너무 많은 읽기를 수행하지 않고도 프로세스를 더 쉽게 추적할 수 있습니다. 문제는 dd
대신 사용하려면 rsync
디렉터리 구조를 수동으로 다시 만들어야 한다는 것입니다. 파일 속성이나 수정 날짜에 신경 쓸 필요가 없습니다.
find
mkdir
, 의 조합을 사용하여 dd
먼저 디렉토리 트리를 다시 만든 다음 파일을 하나씩 복사할 수 있다고 생각했습니다 . 궁금합니다. 이 접근 방식에 단점이 있나요?
답변1
이 문제를 해결하는 가장 좋은 방법은 다음을 사용하는 것 같습니다.직접 파일 출력. 이렇게 하면 du
더 정확한 판독값을 얻을 수 있습니다.
불행히도 dd
이것만 허용되므로 두 가지 문제를 해결해야 합니다.
dd
디렉토리로 무엇을 해야할지 모르겠습니다dd
한 번에 하나의 파일만 복사할 수 있습니다.
먼저 입력 및 출력 디렉터리를 정의합니다.
SOURCE="/media/source-dir"
TARGET="/media/target-dir"
이제 보고서가 쉽게 조작할 수 있는 상대 디렉터리가 cd
되도록 소스 디렉터리로 이동해 보겠습니다 .find
cd "$SOURCE"
디렉토리 트리를 에서 로 복사하세요 $SOURCE
.$TARGET
find . -type d -exec mkdir -p "$TARGET{}" \;
$SOURCE
쓰기 캐시를 무시하기 위한 파일 복제 $TARGET
(그러나 읽기 캐시 활용!)
find . -type f -exec dd if={} of="$TARGET{}" bs=8M oflag=direct \;
이는 파일 수정 시간, 소유권 및 기타 속성을 보존하지 않지만 나에게는 중요하지 않습니다.