--- a/Build.PL Mon Jun 18 14:02:40 2012 +0200
+++ b/Build.PL Wed May 13 15:08:22 2015 +0200
@@ -13,5 +13,6 @@
"Fuse" => "0.09",
"IO::Uncompress::Gunzip" => 0,
"IO::Compress::Gzip" => 0,
+ "BlockDev" => 0,
}
)->create_build_script;
--- a/bin/imager.save Mon Jun 18 14:02:40 2012 +0200
+++ b/bin/imager.save Wed May 13 15:08:22 2015 +0200
@@ -6,7 +6,6 @@
use POSIX qw(strftime);
use autodie qw(:all);
use Digest::MD5 qw(md5_hex);
-use File::Path qw(mkpath);
use File::Basename;
use File::Temp;
use Sys::Hostname;
@@ -14,6 +13,7 @@
use Hash::Util qw(lock_keys);
use Getopt::Long;
use Pod::Usage;
+use Fops;
use constant KiB => 1024;
use constant MiB => 1024 * KiB;
@@ -39,6 +39,7 @@
lock_keys(%o);
my $NOW = time();
+my $FOPS;
MAIN: {
GetOptions(
@@ -69,6 +70,8 @@
or pod2usage;
my $dst = pop @ARGV;
+ $FOPS = Fops->new(native => $dst);
+
foreach my $src (@ARGV) {
if (my $pid = fork()) {
next;
@@ -86,20 +89,21 @@
sub save {
my ($src, $dst) = @_;
- my $idx = "{DIR}/idx/{HOSTNAME}/{DEVICE}/";
- my $data = "{DIR}/data";
- my $info = "{DIR}/data/info";
+ my $idx = "/idx/{HOSTNAME}/{DEVICE}/";
+ my $data = "/data";
+ my $info = "/data/info";
my $size;
foreach ($idx, $data, $info) {
- s/{DIR}/$dst/g;
s/{HOSTNAME}/hostname/eg;
s/{DEVICE}/get_devname($src)/eg;
}
$size = get_devsize($src);
- -d $dst or die "$0: $dst: $!\n";
- mkpath([$data, $idx, $info]);
+ #-d $dst or die "$0: $dst: $!\n";
+ $FOPS->stat("/") or die "$0: $dst: $!\n";
+ $FOPS->is_dir("/") or die "$0: $dst: $!\n";
+ $FOPS->mkpath($data, $idx, $info);
my %index;
$index{META} = {
@@ -152,15 +156,15 @@
push @{ $index{BLOCKS} }, sprintf "%12d %s %s" => ($. - 1),
$cs, $file;
- if (
- not( -e "$data/$file"
- or -e "$data/$file.gz"
- or -e "$data/$file.x"
- or -e "$data/$file.gz.x"
- or -e "$data/$file.x.gz")
+ if (not(
+ $Fops->is_file("$data/$file"),
+ or $Fops->is_file("$data/$file.gz"),
+ or $Fops->is_file("$data/$file.x"),
+ or $Fops->is_file("$data/$file.gz.x"),
+ or $Fops->is_file("$data/$file.x.gz"))
)
{
- mkpath dirname("$data/$file");
+ $FOPS->mkpath(dirname("$data/$file"));
my $out = File::Temp->new(
TEMPLATE => "tmp-XXXXXXX",
DIR => dirname("$data/$file")