+if ($master_is_f) {
+ $backup_filename=$master_filename;
+ }
+if ($master_is_b) {
+ die "Filename is block device but it is unsupported: $master_filename"
+ if $master_filename!~m{^/dev/[hs]d[a-z]};
+ $backup_filename=$master_filename."1";
+
+ sub hdparm_g_start_check($$)
+ {
+ my($filename,$start_expected)=@_;
+
+ local *HDPARM;
+ my $cmdname="hdparm -g '$filename'|";
+ open HDPARM,$cmdname or die "open \"$cmdname\": $!";
+ my $HDPARM=do { local $/; <HDPARM>; } or die "read \"$cmdname\": $!";
+ close HDPARM or die "close \"$cmdname\": $!";
+ my($start)=($HDPARM=~/^\s*\Q$filename\E:\s*geometry\s*=.*,\s*start\s*=\s*(\d+)\s*$/s)
+ or die "Unparsable output of \"$cmdname\":\n$HDPARM";
+ die "Unexpected 'start' parameter $start (expected $start_expected) of: $filename"
+ if $start!=$start_expected;
+ }
+
+ hdparm_g_start_check($master_filename,0);
+ hdparm_g_start_check($backup_filename,$backup_offset/0x200);
+ $backup_offset=0;
+ }
+
+my $MASTER;
+open $MASTER,"+<".$master_filename or die "open \"$master_filename\": $!";