golang/go (original) (raw)
I've created a Github Repo with all the needed steps for reproducing this on Ubuntu 12.04 using Go1.5.1. I've also verified that using Go1.5.2 still experiences this error.
Run vagrant create
then vagrant provision
from repository root.
vagrant create
vagrant provision
Expected Output:
$ vagrant provision
==> default: Running provisioner: shell...
default: Running: inline script
==> default: stdin: is not a tty
==> default: go version go1.5.2 linux/amd64
==> default: Creating Sparse file
==> default: Proving file is truly sparse
==> default: 0 -rw-r--r-- 1 root root 512M Dec 9 15:26 sparse.img
==> default: Compressing in Go without sparse
==> default: Compressing in Go with sparse
==> default: FileInfo File Size: 536870912
==> default: Proving non-sparse in Go gained size on disk
==> default: 512M -rw-r--r-- 1 root root 512M Dec 9 15:26 non_sparse/sparse.img
==> default: Proving sparse in Go DID keep file size on disk
==> default: 0 -rw-r--r-- 1 root root 0 Dec 9 15:26 sparse/sparse.img
==> default: Compressing via tar w/ Sparse Flag set
==> default: Proving sparse via tar DID keep file size on disk
==> default: 0 -rw-r--r-- 1 root root 512M Dec 9 15:26 tar/sparse.img
Actual Output:
$ vagrant provision
==> default: Running provisioner: shell...
default: Running: inline script
==> default: stdin: is not a tty
==> default: go version go1.5.2 linux/amd64
==> default: Creating Sparse file
==> default: Proving file is truly sparse
==> default: 0 -rw-r--r-- 1 root root 512M Dec 9 15:35 sparse.img
==> default: Compressing in Go without sparse
==> default: Compressing in Go with sparse
==> default: Proving non-sparse in Go gained size on disk
==> default: 513M -rw-r--r-- 1 root root 512M Dec 9 15:35 non_sparse/sparse.img
==> default: Proving sparse in Go DID NOT keep file size on disk
==> default: 512M -rw-r--r-- 1 root root 512M Dec 9 15:35 sparse/sparse.img
==> default: Compressing via tar w/ Sparse Flag set
==> default: Proving sparse via tar DID keep file size on disk
==> default: 0 -rw-r--r-- 1 root root 512M Dec 9 15:35 tar/sparse.img
The Vagrantfile supplied in the repository runs the following shell steps:
- Installs Go
- Creates a sparse file via
truncate -s 512M sparse.img
- Proves that the file is sparse via
ls -lash sparse.img
- Runs
compress.go
viago run compress.go
- Untars the archives created by
compress.go
viatar -xf
- Verifies that the extracted files did not maintain sparse files, both with and without the sparse type set in the tar file's header.
ls -lash sparse.img
- Uses GNU/Tar to compress the sparse file with the sparse flag set
tar -Scf sparse.tar sparse.img
- Extracts the archive created by GNU/Tar
tar -xf sparse.tar
- Proves that GNU/Tar maintained sparse files
ls -lash sparse.img
This is somewhat related to #12594.
I could also be creating the archive incorrectly, and have tried a few different methods for creating the tar archive, each one however, did not keep the sparse files intact upon extraction of the archive. This also cannot be replicated in OSX as HGFS+ does not have a concept of sparse files, and instantly destroys any file sparseness, hence the need for running and testing the reproduction case in a vagrant vm.
Any thoughts or hints into this would be greatly appreciated, thanks!