Trying to move /usr

Jerry McAllister jerrymc at msu.edu
Tue Aug 21 07:59:47 PDT 2007


On Mon, Aug 20, 2007 at 10:50:09PM -0400, Vinny wrote:

> Michael S wrote:
> >I reverted to the old /usr.
> >What I had done:
> >Initially I set up the newly installed drive (da2)
> >to have only one partition (da2s1d) which I chose to
> >be /user (note the e).
> >I tarred /usr to a file in /user
> >tar -cf /user/usr.tar /tar
> >
> >and extracted the file
> >tar -xf usr.tar
> >I had the whole structure of /usr underneath /user/usr
> >
> >And then
> >cd usr
> >mv * ..
> >
> >to have everything under /user
> >
> 
> After thinking about that mv command, I have come to the
> conclusion that /dev/da2s1d does not in fact contain
> a /usr directory structure and if mounted will be
> empty.  Why?
> 
> Note /dev/ad8s1e is an empty partition (a new disk,
> if you will on my system that I will in this demonstration).
> 
> Also, I'll use user and usrdemo as the names of the user and usr
> directories that Michael is using, respectively.  I don't want
> to overwrite my own usr directory needlessly.
> 
> Observe:
> 
> Create a mount point and mount the disk
> t# cd /
> t# mkdir user
> t# mount -t ufs /dev/ad8s1e /user
> 
> t# pwd
> /user
> t# mkdir -p usrdemo/path
> 
> Check our partition (there is a dot (.)after the df command,
> look closely):
> 
> t# df .
> Filesystem  1K-blocks Used  Avail Capacity  Mounted on
> /dev/ad8s1e    507630    6 467014     0%    /user
> 
> Create a file for no reason.
> 
> t# touch usrdemo/path/file.txt
> t# cd /
> t# ls -laR /user
> total 6
> drwxrwxrwt   3 root  wheel   512 Aug 20 22:05 .
> drwxr-xr-x  26 root  wheel  1024 Aug 20 21:59 ..
> drwxr-xr-x   3 root  wheel   512 Aug 20 22:05 usrdemo

Try using the 'F' flag on ls.   It will make it clear when
you are looking at a directory name and when it is a regular file
and when it is a link.

It makes thing easier to follow. 
Actually, I normally alias 'ls'  to  'ls -F' in my .cshrc to
make it that way all the time.

////jerry

> 
> /user/usrdemo:
> total 6
> drwxr-xr-x  3 root  wheel  512 Aug 20 22:05 .
> drwxrwxrwt  3 root  wheel  512 Aug 20 22:05 ..
> drwxr-xr-x  2 root  wheel  512 Aug 20 22:05 path
> 
> /user/usrdemo/path:
> total 4
> drwxr-xr-x  2 root  wheel  512 Aug 20 22:05 .
> drwxr-xr-x  3 root  wheel  512 Aug 20 22:05 ..
> -rw-r--r--  1 root  wheel    0 Aug 20 22:05 file.txt
> t# cd /user
> 
> Let's look at what file system we're on again:
> 
> t# df .
> Filesystem  1K-blocks Used  Avail Capacity  Mounted on
> /dev/ad8s1e    507630    6 467014     0%    /user
> 
> Still on the new drive.
> 
> Now that we're in the /user directory let us try, as Michael
> says "to have everything under /user".  Right idea, but mv is not
> the tool in this case: The next command causes much trouble:
> 
> t# mv * ..
> 
> will in fact move the contents of /user to the parent directory
> which is in fact /, the root of the file system.
> 
> There is nothing left in /user:
> t# pwd
> /user
> 
> t# ls -la
> total 4
> drwxrwxrwt   2 root  wheel  512 Aug 20 22:06 .
> drwxr-xr-x  27 root  wheel  512 Aug 20 22:06 ..
> 
> If we change directory to the .. directory target (the same target as
> the mv command) we'll see the usrdemo directory.
> 
> t# cd ..
> t# ls
> .cshrc          compat          lib             proc            usb
> .profile        dev             libexec         rescue          usr
> .snap           dist            media           root            usrdemo
> COPYRIGHT       dvdrom          mnd             sbin            var
> bin             entropy         mnt             sdvd
> boot            etc             user            sys
> cdrom           home            portable        tmp
> 
> If we change to it and check our file system:
> 
> t# cd usrdemo/path/
> t# ls
> file.txt
> t# df .
> Filesystem  1K-blocks  Used  Avail Capacity  Mounted on
> /dev/ad4s1a    507630 99704 367316    21%    /
> 
> We find it now sitting as a directory the / root partition!
> In Michael's case it would be sitting on the old /usr
> partition.  Definitely not what we wanted.
> 
> So what has happened is that the mv * command with Michael's
> usr directory actually overwrote the current /usr directory
> with the contents of the tar archive.  Seems like a no-op but
> there could be symbolic link issues, i.e. /usr/home -> /home.
> 
> I hope that is semi-coherent.
> 
> What you probably want to do to replace a /usr partition is
> something like this:
> 
> cd /
> mkdir user
> mount -t ufs /dev/da2s1d /user
> cd /usr
> pax -rw -pe . /user
> 
> pax is like tar. -rw means to read (r) from the source (.)
> and write (w) to the destination (/user).  -pe means to
> preserve everything (permissions, ownership etc).
> 
> Having done that, you now have a duplicate usr directory
> structure "under" /user i.e. /user/bin /user/lib and so on.
> 
> Now you can switch the fstab entries like you planned,
> reboot, and you should have replaced /usr with the
> new drive.
> 
> Hope this helps, although you may have some issues
> in the future due to any unintended consequences
> of the tar/mv command combination.
> 
> Vinny
> 
> 
> 
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"


More information about the freebsd-questions mailing list