Quantcast
Channel: IT From All Angles
Viewing all articles
Browse latest Browse all 23

Adventures in ZFS: Timestamps Ruined My Rsync

$
0
0

So let me start out by saying…  This isn’t so much of a problem with ZFS, as it is just a problem with the tools available in Solaris (not to mention whatever device actually screwed up the timestamp in the first place).  But so here is the story.  We have found that migrating our lower level file servers to Solaris on top of deduped or compressed ZFS is really fantastic for our environment.  So I have been working on migrating more and more data to this pool of storage in order to free up some of our more expensive storage for other data.

So this is the error that I experienced.

rsync: readlink_stat("/mnt/migration/engcommon/data2/eng/common/sc/Assert9797/feCalPersist.dat") failed: Value too large for defined data type (79)

Now to confirm that you are experiencing the same issue try this (of course substituting your file name for the filename I had).

# /usr/bin/ls -lh /mnt/migration/engcommon/data2/eng/common/sc/Assert9797/feCalPersist.dat
/mnt/migration/engcommon/data2/eng/common/sc/Assert9797/feCalPersist.dat: Value too large for defined data type
# /usr/bin/amd64/ls -lh /mnt/migration/engcommon/data2/eng/common/sc/Assert9797/feCalPersist.dat
-rwxr-xr-x+  1 2147483658 smbusers    1.5K Jan 5  2080 /mnt/migration/engcommon/data2/eng/common/sc/Assert9797/feCalPersist.dat

Now clearly the /usr/bin/ls has an issue in dealing with files which /usr/bin/amd64/ls does not have.  This is due to the 32-bit  “2038” problem.  Basically Unix has a Y2K bug as well, only it is 38 years later.  So the easiest way to fix this is to touch the file to update the time…  But really could it be that easy?  Yes and No.  See you cannot touch the file with Solaris, touch doesn’t have a 64-bit binary so it has the same limitations.

Now from a 64-bit Linux machine we can mount the SMB Share.  I used Ubuntu 11.04 amd64 Desktop.

# apt-get install smbfs
# mount -t smbfs //server/d$ /mnt -o user=ALLANGLESIT/administrator

Displaying the file shows that someone has apparently returned from the future with this file.

# ls -lh /mnt/data2/eng/common/sc/Assert9797/feCalPersist.dat
-rwxr-xr-x 1 root root 1.5K 2080-01-05 12:36 feCalPersist.dat

This can be easily changed by touching it.

# touch /mnt/data2/eng/common/sc/Assert9797/feCalPersist.dat

And now the updated timestamp from Linux.

# ls -lh /mnt/data2/eng/common/sc/Assert9797/feCalPersist.dat
-rwxr-xr-x 1 root root 1.5K 2011-08-17 12:36 feCalPersist.dat

But what about from Solaris.

# /usr/bin/ls -lh
-rwxrwx---+  1 2147483658 smbusers    1.5K Aug 17 12:36 feCalPersist.dat

Now when re-running the rsync it runs without any issues.


Viewing all articles
Browse latest Browse all 23

Trending Articles