ㅏ논평또 다른 질문이 나를 궁금하게 만듭니다.
명령의 출력을 블록 장치로 리디렉션하고 해당 출력의 길이가 블록 장치의 블록 크기보다 작다고 가정합니다.
% 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) 및 파티션 테이블을 수정하기 위해 드라이브 맨 앞에 쓸 수 있습니다.
그러나 일부 다른 소프트웨어를 사용하여 전체 블록을 작성할 수도 있습니다.
특정 프로그램이 어떻게 작동하는지 테스트하는 것이 좋습니다. (또는 테스트하는 데 도움을 받는 것도 좋습니다.)