출력을 블록 장치로 리디렉션하면 바이트 또는 전체 블록을 덮어쓰나요?

출력을 블록 장치로 리디렉션하면 바이트 또는 전체 블록을 덮어쓰나요?

논평또 다른 질문이 나를 궁금하게 만듭니다.

명령의 출력을 블록 장치로 리디렉션하고 해당 출력의 길이가 블록 장치의 블록 크기보다 작다고 가정합니다.

% blockdev --getbsz /dev/sda
4096

% head -c 100 /dev/zero > /dev/sda

/dev/sda의 처음 100바이트를 포함합니까, 아니면 처음 4096바이트(즉, 하나의 전체 블록)를 포함합니까?
동작이 쉘, 출력 버퍼링 설정 또는 *nix 특성(*BSD와 같은 블록 장치 대신 문자 장치 사용)에 따라 달라지나요?

답변1

기본 블록 크기보다 N 크기가 작은 블록 장치에 쓰는 경우 OS는 (1) 장치에서 전체 블록을 읽고 (2) 첫 번째 N 블록(오프셋이 0이라고 가정)을 다음과 같이 업데이트할 것으로 예상합니다. 입력한 내용을 쓰는 것과 같은 번호, (3) 전체 블록을 디바이스에 다시 씁니다. 최종 결과는 처음 N 바이트가 기록된 것처럼 보입니다.

답변2

내 경험에 따르면 dd적어도 일부 소프트웨어는 (전체 블록 대신) 지정된 바이트 수만 씁니다. 예를 들어, BIOS 부팅 섹터(MBR) 및 파티션 테이블을 수정하기 위해 드라이브 맨 앞에 쓸 수 있습니다.

그러나 일부 다른 소프트웨어를 사용하여 전체 블록을 작성할 수도 있습니다.

특정 프로그램이 어떻게 작동하는지 테스트하는 것이 좋습니다. (또는 테스트하는 데 도움을 받는 것도 좋습니다.)

관련 정보