出力をブロックデバイスにリダイレクトすると、バイトまたはブロック全体が上書きされますか?

出力をブロックデバイスにリダイレクトすると、バイトまたはブロック全体が上書きされますか?

コメントもう一つの質問は私を疑問にさせます。

コマンドの出力をブロックデバイスにリダイレクトし、その出力の長さがブロックデバイスのブロックサイズより小さいと仮定します。

% blockdev --getbsz /dev/sda
4096

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

/dev/sda の最初の 100 バイトを含めるか、それとも最初の 4096 バイト (つまり、1 つのブロック全体) を含めますか?
動作は、シェル、出力バッファリング設定、または* nix属性(* BSDなどのブロックデバイスではなく文字デバイスを使用)によって異なりますか?

ベストアンサー1

デフォルトのブロックサイズよりもNサイズの小さいブロックデバイスに書き込む場合、OSは(1)デバイスからブロック全体を読み取り、(2)最初のNブロック(オフセットが0であると仮定)を次のように更新すると予想します。入力した内容を書き込むのと同じ番号、(3)ブロック全体をデバイスに書き換えます。最終結果は最初のNバイトが書き込まれたようです。

おすすめ記事