From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 0462C1FF161 for ; Wed, 4 Dec 2024 11:34:09 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 12F09549F; Wed, 4 Dec 2024 11:34:08 +0100 (CET) From: Filip Schauer To: pbs-devel@lists.proxmox.com Date: Wed, 4 Dec 2024 11:33:31 +0100 Message-Id: <20241204103331.69226-1-f.schauer@proxmox.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.026 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH backup] fix #5946: disks: wipe: ensure GPT header backup is wiped X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" When wiping a block device with a GUID partition table, the header backup might get left behind at the end of the disk. This commit also wipes the last 4096 bytes of the disk, making sure that a GPT header backup is erased, even from disks with 4k sector sizes. Signed-off-by: Filip Schauer --- src/tools/disks/mod.rs | 47 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/src/tools/disks/mod.rs b/src/tools/disks/mod.rs index 61aceccd..26e14603 100644 --- a/src/tools/disks/mod.rs +++ b/src/tools/disks/mod.rs @@ -1176,29 +1176,38 @@ pub fn wipe_blockdev(disk: &Disk) -> Result<(), Error> { let wipefs_output = proxmox_sys::command::run_command(wipefs_command, None)?; info!("wipefs output: {wipefs_output}"); - let size = disk.size().map(|size| size / 1024 / 1024)?; - let count = size.min(200); - - let mut dd_command = std::process::Command::new("dd"); - let mut of_path = OsString::from("of="); - of_path.push(disk_path); - let mut count_str = OsString::from("count="); - count_str.push(count.to_string()); - let args = [ - "if=/dev/zero".into(), - of_path, - "bs=1M".into(), - "conv=fdatasync".into(), - count_str, - ]; - dd_command.args(args); - - let dd_output = proxmox_sys::command::run_command(dd_command, None)?; - info!("dd output: {dd_output}"); + let dd_zero = |seek: Option<&str>, bs: &str, count: &str| -> Result<(), Error> { + let mut dd_command = std::process::Command::new("dd"); + let mut of_path = OsString::from("of="); + of_path.push(disk_path); + dd_command + .arg("if=/dev/zero") + .arg(of_path) + .arg(format!("bs={bs}")) + .arg("conv=fdatasync") + .arg(format!("count={count}")); + + if let Some(seek) = seek { + dd_command.arg(format!("seek={seek}")); + } + + let dd_output = proxmox_sys::command::run_command(dd_command, None)?; + info!("dd output: {dd_output}"); + + Ok(()) + }; + + let size = disk.size()?; + let count = (size / 1024 / 1024).min(200).to_string(); + dd_zero(None, "1M", &count)?; if is_partition { // set the partition type to 0x83 'Linux filesystem' change_parttype(disk, "8300")?; + } else { + // Wipe the end of the disk to remove a potential GPT header backup + let seek = (size / 512 - 8).to_string(); + dd_zero(Some(&seek), "512", "8")?; } Ok(()) -- 2.39.5 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel