|
|
|
@ -6,6 +6,7 @@ import ( |
|
|
|
|
"fmt" |
|
|
|
|
"os/exec" |
|
|
|
|
"regexp" |
|
|
|
|
"sort" |
|
|
|
|
"strings" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
@ -29,31 +30,35 @@ func main() { |
|
|
|
|
for snapScanner.Scan() { |
|
|
|
|
if snapshotLineRegex.MatchString(snapScanner.Text()) { |
|
|
|
|
var temp = strings.SplitN(snapScanner.Text(), "\t", 2) |
|
|
|
|
var snapshot = ParseSnapshot(temp[0]) |
|
|
|
|
if snapshot != nil { |
|
|
|
|
|
|
|
|
|
/* var sender = exec.Command("zfs", "send", "-c", |
|
|
|
|
snapshot.String()) |
|
|
|
|
var inData, err = sender.StdoutPipe() |
|
|
|
|
if err != nil { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
var receiver = exec.Command("zfs", "receive", "-x", |
|
|
|
|
"mountpoint", "backups/test/"+snapshot.Path()) |
|
|
|
|
var outData io.WriteCloser |
|
|
|
|
outData, err = receiver.StdinPipe() |
|
|
|
|
if err != nil { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
fmt.Println("Writing ", snapshot.String(), " to backups/test") |
|
|
|
|
buf := make([]byte, 4*1024*1024) |
|
|
|
|
sender.Start() |
|
|
|
|
receiver.Start() |
|
|
|
|
io.CopyBuffer(outData, inData, buf) |
|
|
|
|
sender.Wait() |
|
|
|
|
receiver.Wait() |
|
|
|
|
break */ |
|
|
|
|
var snapshot, err = ParseSnapshot(temp[0]) |
|
|
|
|
if err != nil { |
|
|
|
|
// Ignore the bad input
|
|
|
|
|
} |
|
|
|
|
snapshots[snapshot.Path()].addSnapshot(snapshot) |
|
|
|
|
/* var sender = exec.Command("zfs", "send", "-c", |
|
|
|
|
snapshot.String()) |
|
|
|
|
var inData, err = sender.StdoutPipe() |
|
|
|
|
if err != nil { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
var receiver = exec.Command("zfs", "receive", "-x", |
|
|
|
|
"mountpoint", "backups/test/"+snapshot.Path()) |
|
|
|
|
var outData io.WriteCloser |
|
|
|
|
outData, err = receiver.StdinPipe() |
|
|
|
|
if err != nil { |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
fmt.Println("Writing ", snapshot.String(), " to backups/test") |
|
|
|
|
buf := make([]byte, 4*1024*1024) |
|
|
|
|
sender.Start() |
|
|
|
|
receiver.Start() |
|
|
|
|
io.CopyBuffer(outData, inData, buf) |
|
|
|
|
sender.Wait() |
|
|
|
|
receiver.Wait() |
|
|
|
|
break */ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for i := range snapshots { |
|
|
|
|
sort.Sort(snapshots[i]) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|