(no commit message)
[ikiwiki.git] / docs / how_to_implement_hammer_pseudo_file_system__40___pfs___41___slave_mirroring_from_pfs_master / index.mdwn
1
2 [[!toc]]
3 #Scenario
4 I have two 500 GB hard disks both having hammer file system. I want to create a master pfs in one of the hard disk and a slave pfs in the other disk. I want to mirror the data continuosly from the master pfs to the slave pfs. This will help me avoid long 'fsck'and raid parity rewrite times after an unclean shut down and also will give me a set up some what like Raid.
5
6 #Creating the master pfs on Disk 1
7
8 The hammer file systems on Disk 1 and Disk2 are mounted in '/etc/fstab' according to the following.
9
10     /dev/ad4s1h             /Backup1        hammer  rw              2       2
11     /dev/ad6s1h             /Backup2        hammer  rw              2       2
12
13 Go to the hammer file system on Disk 1. We will be creaing a master pfs called 'test' and will be mounting it using a null mount. If you dont have a directory called 'pfs' under the hammer file system you should create it because it is there we will be creating the pfs.
14
15     # pwd
16     /Backup1
17     # mkdir pfs
18
19 If you already have the pfs directory under the hammer file system you can skip the above step and continue.
20
21     # hammer pfs-master /Backup1/pfs/test
22     Creating PFS #3 succeeded!
23     /Backup1/pfs/test
24     sync-beg-tid=0x0000000000000001
25     sync-end-tid=0x000000013f644ce0
26     shared-uuid=9043570e-b3d9-11de-9bef-011617202aa6
27     unique-uuid=9043574c-b3d9-11de-9bef-011617202aa6
28     label=""
29     prune-min=00:00:00
30     operating as a MASTER
31     snapshots dir for master defaults to <fs>/snapshots
32
33     
34 Now the master pfs 'test' is created. make a note of its 'shared-uuid' because we will need to use that to create the Slave pfs for mirroring.
35 You can mount the pfs under the hammer file system on Disk 1 by doing the following.
36
37     # mkdir /Backup1/test
38
39 Now Edit '/etc/fstab' to contain the following line.
40
41     /Backup1/pfs/test      /Backup1/test    null    rw              0       0
42
43 Now mount the pfs by doing.
44
45     # mount -a
46     # mount |grep test
47     /Backup1/pfs/@@-1:00003 on /Backup1/test (null, local)
48
49 #Creating the slave pfs on Disk 2. 
50 Note that we will be using the 'shared-uuid of the master pfs so enable mirroring.
51     
52     # hammer pfs-slave /Backup2/pfs/test shared-uuid=9043570e-b3d9-11de-9bef-011617202aa6
53     Creating PFS #3 succeeded!
54     /Backup2/pfs/test
55     sync-beg-tid=0x0000000000000001
56     sync-end-tid=0x0000000000000001
57     shared-uuid=9043570e-b3d9-11de-9bef-011617202aa6
58     unique-uuid=97d77f53-b3da-11de-9bef-011617202aa6
59     slave
60     label=""
61     prune-min=00:00:00
62     operating as a SLAVE
63     snapshots directory not set for slave
64
65
66 The slave pfs is not mounted but a symlink is created in the root hammer file system to point to it.
67
68     # ln -s /Backup2/pfs/test /Backup2/test
69     # ls -l /Backup2/test
70     lrwxr-xr-x  1 root  wheel  17 Oct  8 12:07 /Backup2/test -> /Backup2/pfs/test
71
72 #Copying contents from pfs on Disk 1 to pfs on Disk2 to enable mirroring. 
73 The pfs will be accessible only after the first 'mirror-copy' operation.
74
75     # touch /Backup1/test/test-file
76     # ls /Backup1/test/
77     test-file
78     # sync
79
80 We do the "sync" so that the file creation operation in flushed from the kernel memory. Mirroring works only on operations flushed from the kernel memory. The slave pfs will be accessible only after the first mirroring operation.
81
82     # hammer mirror-copy /Backup1/test /Backup2/pfs/test
83     histogram range 000000013f6425fd - 000000013f644d60
84     Mirror-read: Mirror from 0000000000000002 to 000000013f644d60
85     Mirror-read /Backup1/test succeeded
86
87     # ls /Backup2/test/
88     test-file
89
90 #Enabling continuous mirroring.
91
92 You can enable continuous mirroring by editing a few files.
93 One way to make sure the mirroring works continously is to use the 'lockf' utility.
94 This is one way to do it.
95
96     # mkdir /root/adm && cd /root/adm
97     # touch .lockfile
98
99 Now make two scripts 'hms' and 'hmc' with the following contents inside /root/adm
100
101     # cat hms
102     hammer mirror-stream /Backup1/test /Backup2/test &
103
104     # cat hmc
105     hammer synctid /Backup1/test
106     hammer mirror-copy /Backup1/test /Backup2/test 
107
108 Edit '/etc/rc.local and add the following line.
109
110     (cd /root/adm; /usr/bin/lockf -k -t 0 .lockfile ./hms) &
111
112 Edit 'crontab' and add the following Lines.
113
114     #Check and restart mirroring if needed every 10 minutes
115     10 1 * * * (cd /root/adm; /usr/bin/lockf -k -t 0 .lockfile ./hms) &
116
117 Edit '/etc/rc.shutdown.local' and add the following lines.
118
119     pkill -f /usr/bin/lockf -k -t 0 .lockfile ./hms
120     pkill -f hammer mirror-stream /Backup1/test /Backup2/test
121     (cd /root/adm; /usr/bin/lockf -k -t 10 .lockfile ./hmc)