WIKI.9FRONT.ORG UNOFFICIAL MIRROR OF WIKI.A-B.XYZ

Migrating CWFS

From time to time one may wish to move a CWFS instance from one device to another. Perhaps the old device is full or faulty. Perhaps you’d just like to make a backup. In any case, the process is fairly simple.

Prepare new device

After installing the new drive and powering up the machine, the first thing to do is identify the new device. The #S device indicates that the new device has been recognised.

   cpu% ls '#S'
   '#S/sdD0'
   '#S/sdD1'
   '#S/sdctl'
   cpu%  cat '#S/sdD0/ctl'
   inquiry KINGSTON SA400S37240G
   config 0040 capabilities 2F00 dma 00550020 dmactl 00550020 rwm 1 rwmctl 0 lba48always off
   model  KINGSTON SA400S37240G
   serial 50026B768422720C
   firm   SBFKJ4.3
   feat   lba llba smart power nop ata8 
   geometry 468862128 512
   alignment 512 0
   missirq       0
   sloop  0
   irq    18977 30
   bsy    0 0
   nildrive      6
   part data 0 468862128
   cpu% 

Next, we prepare the MBR and DOS partition table with disk/mbr and disk/fdisk:

   cpu% disk/mbr -m /386/mbr '#S/sdD0/data'
   cpu% disk/fdisk -w -a '#S/sdD0/data'
   cpu% cat '#S/sdD0/ctl'
   inquiry KINGSTON SA400S37240G
   config 0040 capabilities 2F00 dma 00550020 dmactl 00550020 rwm 1 rwmctl 0 lba48always off
   model  KINGSTON SA400S37240G
   serial 50026B768422720C
   firm   SBFKJ4.3
   feat   lba llba smart power nop ata8 
   geometry 468862128 512
   alignment 512 0
   missirq       0
   sloop  0
   irq    20034 55
   bsy    0 0
   nildrive      6
   part data 0 468862128
   part plan9 63 468862128
   cpu% 

Now we can set up the plan9 partition table. I’ve chosen to elide the ‘other’ partition this time around as I’ve never used it in the entire 6 years that I’ve been using the previous filesystem.

   cpu% disk/prep -w -a 9fat -a nvram -a fscache -a fsworm '#S/sdD0/plan9'
   no plan9 partition table found
   9fat 204800
   nvram 1
   fscache 78109544
   fsworm 390547720
   cpu% 

Copy old WORM

Disable the background dump service and trigger a final dump of the old file system:

   cpu% echo cwcmd startdump 0 >>/srv/cwfs.cmd
   cpu% echo dump >>/srv/cwfs.cmd

There’s no point copying the entire WORM partition so let’s work out how much of it needs to be copied using the statw command:

   cpu% con -C /srv/cwfs.cmd
   statw
   cwstats main
          filesys main
                 maddr  =        3
                 msize  =     5147
                 caddr  =      518
                 csize  =   694845
                 sbaddr =  1668338
                 craddr =  1697494  1697494
                 roaddr =  1697497  1697497
                 fsize  =  1697599  1697599  0+48%
                 slast  =           1668081
                 snext  =           1697498
                 wmax   =  1697497           0+48%
                 wsize  =  3484185           1+ 0%
                 223247 none
                   8903 dirty
                      0 dump
                 461561 read
                   1134 write
                      0 dump1
                 cache  5% full

So we need only copy fsize 16K blocks. We can use dd(1) to do so, but please, double and triple check the order of your arguments before running this command!

   cpu% dd -if '#S/sdD1/fsworm' -of '#S/sdD0/fsworm' -bs 16k -count 1697599
   cpu% 

This will likely take quite some time. In the example above, copying 1697599*16K ≈ 25G took around 10 minutes or so.

Bring up new FS

   cpu% bind -a '#S' /dev
   cpu% cwfs64x -n newcwfs -f /dev/sdD0/fscache -C -c
   config: service cwfs
   config: config /dev/sdD0/fscache
   config: filsys main c(/dev/sdD0/fscache)(/dev/sdD0/fsworm)
   config: filsys dump o
   config: recover main
   config: end
   checktag pc=20eb0f n(3) tag/path=Tnone/0; expected Tsuper/2
   current fs is "main"
   11 uids read, 7 groups used
   63-bit cwfs as of Mon Nov  9 20:51:45 2020
          last boot Sat Nov 28 14:34:23 2020
   cpu% 

You can now mount the new filesystem:

   cpu% mount /srv/newcwfs /n/newroot
   cpu% mount /srv/newcwfs /n/newdump dump
   cpu% 

Copy 9fat and nvram

The last thing to do is to copy the 9fat and nvram partitions from your old disk to the new one. This is trivial:

   cpu% cp '#S/sdD1/9fat' '#S/sdD1/nvram' '#S/sdD0'
   cpu% 

You should now be able reboot from the new disk.