From d3c5cf24876d2b0e1399f717e2f77eaf063ae7a7 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Tue, 22 Jun 2021 14:18:23 +0200 Subject: [PATCH] btrfs: make NOCOW optional Signed-off-by: Wolfgang Bumiller --- PVE/Storage/BTRFSPlugin.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/PVE/Storage/BTRFSPlugin.pm b/PVE/Storage/BTRFSPlugin.pm index 072dfe0..1fe5db0 100644 --- a/PVE/Storage/BTRFSPlugin.pm +++ b/PVE/Storage/BTRFSPlugin.pm @@ -46,6 +46,19 @@ sub plugindata { }; } +sub properties { + return { + nocow => { + description => "Set the NOCOW flag on files." + . " Disables data checksumming and causes data errors to be unrecoverable from" + . " while allowing direct I/O. Only use this if data does not need to be any more" + . " safe than on a single ext4 formatted disk with no underlying raid system.", + type => 'boolean', + default => 0, + }, + }; +} + sub options { return { path => { fixed => 1 }, @@ -56,6 +69,7 @@ sub options { content => { optional => 1 }, format => { optional => 1 }, is_mountpoint => { optional => 1 }, + nocow => { optional => 1 }, # TODO: The new variant of mkdir with `populate` vs `create`... }; } @@ -311,7 +325,7 @@ sub alloc_image { } elsif ($fmt eq 'raw') { sysopen my $fh, $path, O_WRONLY | O_CREAT | O_EXCL or die "failed to create raw file '$path' - $!\n"; - chattr($fh, ~FS_NOCOW_FL, FS_NOCOW_FL); + chattr($fh, ~FS_NOCOW_FL, FS_NOCOW_FL) if $scfg->{nocow}; truncate($fh, $size * 1024) or die "failed to set file size for '$path' - $!\n"; close($fh);