ref: a01b8642c3fd319efd13a5f90680fab759f627ee
dir: /migrating-cwfs.md/
# 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.