Changes between Version 6 and Version 7 of bdsync
- Timestamp:
- Apr 2, 2015, 5:53:03 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
bdsync
v6 v7 5 5 It works like this: 6 6 7 * Generate a diff file that records the differences between two block devices (typically one is local and the other is on a remote machine). 7 * Generate a diff file that records the differences between two block devices (typically one is local and the other is on a remote machine). With a remote block device, you have to have ssh access to the remote server - but just to read the remote block device - bdsync doesn't write to it at this stage. 8 * Copy the diff file to the remote machine. 8 9 * Apply the diff file to the remove machine's block device so that they are in sync. 10 * Repeat. 9 11 10 == Using bdsync to move virtual guests on MF/PL infrastructure = 12 == Using bdsync to move virtual guests on MF/PL infrastructure == 11 13 12 14 bdsync is not (yet) in debian. So, it has to be compiled. Fortunately it is a small program that is easy to compile. 13 15 16 == In puppet == 17 18 Since you are sync'ing two block devices, both block devices need to exist. On the source machine, of course, it will exist. However, it won't exist on the target machine. 19 20 To ensure it is properly created on the target, you will need to add a guest stanza in the target machine's .pp file in puppet. You can copy, exactly, the stanza from the source machine. Then commit the change and push to the origin and push to the target machine. When you push to the target machine, the target block device and guest will be greated - but the guest won't be started or have anything installed. 21 14 22 === On the source machine === 23 24 These steps are only necessary the first time. If your target server is ken, you don't need to do anything. Otherwise, you can probably copy the binary bdsync program from `ken.mayfirst.org` and skip this step entirely. 15 25 16 26 * As root, install dependencies: … … 20 30 * As root, Create a bdsync user to compile the program: 21 31 {{{ 22 useradd bdsync 32 useradd bdsync-builder 23 33 }}} 24 34 * Become that user 25 35 {{{ 26 su - bdsync 36 su - bdsync-builder 27 37 }}} 28 38 * Check out the source and cd into the source directory: … … 37 47 You should end up with a bdsync binary in your current directory. 38 48 49 * Since you will be creating giant diff files - you have to be sure you have a device that is as big as the biggest logical volume you are going to move. 50 * Check available space: 51 {{{ 52 vgs 53 }}} 54 * Create a lvs: 55 {{{ 56 lvcreate --size SIZEGB --name bdsync NAME_OF_VG 57 }}} 58 * Make a filesystem: 59 {{{ 60 mkfs --type ext4 PATH/TO/LV 61 }}} 62 39 63 === On the target machine === 40 64 41 65 * If the source and target machines are running the same version of debian and have the same architecture, just copy the bdsync binary to the target machine. Otherwise, repeat this process on the target machine. 66 67 * Unlike the source machine (where you will run as the root user), you will be running as the bdsync user on the target machine. So, you need a bdsync user created. 68 42 69 * If you haven't already, create a bdsync user on the target machine: 43 70 {{{ … … 53 80 }}} 54 81 55 === Create first diff === 56 57 On the target machine, figure out which device is the one being used, e.g.: 58 82 * Ensure the bdsync user can write to the device. On the target machine, figure out which device is the one being used, e.g.: 59 83 {{{ 60 84 0 cleaver:~# ls -l /dev/mapper/vg_cleaver0-fuller … … 62 86 0 cleaver:~# 63 87 }}} 64 65 Then, chgrp it so that the bdsync user can read it: 66 88 * Then, chgrp it so that the bdsync user can read it: 67 89 {{{ 68 90 chgrp bdsync /dev/dm-3 69 91 }}} 70 92 71 On the source machine execute the following command. Replace $LOCALDEV with the path to the block device on the local machine and $REMDEV with the path of the block device on the remote machine (e.g. /dev/mapper/vg_kiyoshi0-chavez). Replace $TARGETSERVER with the name of the target server (e.g. "chavez"): 93 * You also need to make sure the target server has a big enough volume to receive the giant diff that is coming. Repeat the steps above for creating a logical volume and mounting it under the bdsync user's home directory. 94 95 === Let's begin === 96 97 On the source machine execute the following command as root. Replace $LOCALDEV (e.g. /dev/mapper/vg_ken0-debs) with the path to the block device on the local machine and $REMDEV with the path of the block device on the remote machine (e.g. /dev/mapper/vg_cleaver0-debs). Replace $TARGETSERVER with the name of the target server (e.g. "cleaver"): 72 98 73 99 Running via ionice ensures that it doesn't kill all disk i/o on the machine.