파티션에서 0바이트를 계산하는 가장 빠른 방법

파티션에서 0바이트를 계산하는 가장 빠른 방법

내 루트 및 기본 파티션은 LUKS로 암호화되었습니다. 삭제/정리를 활성화하고 싶습니다(보안 관련 사항을 알고 있습니다). 내 이해가 정확하다면 원시 디스크 장치에서는 드롭 영역이 0이 되고 cryptsetup 매핑된 장치에서는 드롭 영역이 깨집니다.

일부 구성을 변경하고 실행 fstrim한 후 삭제가 제대로 작동하는지 확인하고 싶습니다. 이를 위해 파티션에서 0인 바이트 수를 계산하고 싶습니다. 정리된 디스크에서는 다음을 기대합니다.

count of 0 bytes¼ total partition sizepercentage of free space

정리되지 않은 암호화된 파티션에서: (모든 바이트가 적어도 한 번 기록된다고 가정)

count of 0 bytestotal partition size¼ 256

에서 영감을 받다바이너리 파일에서 바이트 발생에 대한 통계를 어떻게 수집할 수 있나요?, 나는 다음과 같은 접근 방식을 시도했습니다.

sudo pv /dev/disk/by-label/ESP | od -vtu1 -An -w1 | grep -Fx '   0' | wc -l

그러나 결과는 실망스러웠습니다. 500MB 파티션을 처리하는 데 거의 3분이 걸렸습니다. 이는 3MB/초이고 내 SSD는 360MB/초의 순차 읽기 속도를 달성할 수 있습니다. 또한 다른 코어가 유휴 상태인 동안 내 CPU 코어 중 하나가 100%로 실행되는 것을 확인했기 때문에 이것이 병렬화의 이점을 얻을 수 있다고 생각했습니다. ( 의 영향 pv은 미미하며 와 비교하면 거의 차이가 없습니다 cat.)

0파티션의 바이트 수를 계산하는 가장 빠른 방법은 무엇입니까?

답변1

원시 디스크(암호화되지 않음)에 액세스할 수 있는 경우 다음을 수행할 수 있습니다.

dd if=/dev/sda bs=1M count=100 2>/dev/null | tr -d '\0' | wc -c

그러면 디스크에서 100MB를 읽고 0을 모두 제거한 후 남은 바이트를 계산합니다.

이것이 가장 빠른 방법인지는 모르겠지만 데이터보다 0이 많다고 가정하면 꽤 빠를 것입니다.

위 명령은 가능한 경우 100회 1Mega byte또는 (104857600)바이트를 읽습니다. 100*2^20속도와 명령이 얼마나 잘 작동하는지 테스트하려면 더 작은 숫자(10 또는 100)를 사용해 보십시오. 전체 디스크를 읽으려면 count 옵션을 제거하고 명령을 디스크의 한쪽에만 제한하면 됩니다.

두 가지 중요한 값(전체 디스크 바이트 및 0이 아닌 바이트)을 추출하려면 명령이 더욱 복잡해집니다.

$ time { { { sudo dd if=/dev/sdX bs=100M 2> >(grep -oP '[0-9]+(?=\s*bytes)' 1>&2 ) | tr -d '\0' | wc -c; } 2>&1; } | { read -d '' a b; echo "$b/$a"; }; }

그러면 두 값이 모두 다음과 같이 인쇄됩니다. non-zero/disk예를 들면 다음과 같습니다.

766568020/999292928

1-766568020/999292928발견된 0바이트의 비율을 계산합니다 .

$ bc <<<'(1-766568020/999292928)*100'
23.28895776994831289400

관련 정보