基于LVM和NBD实现远程镜像
来源:互联网 发布:数控编程薄膜按键开关 编辑:程序博客网 时间:2024/04/29 18:26
http://wenku.baidu.com/link?url=SXLRzq06NauNHzZqULQu4xjpRO54mjivITNgLrPiM7UZidukUeYkY3foXYKxsIgV2rvP2GNF8RF_jt4AEXbdkVnYoGvHX_808vjz-v9s4ry
一.NBD简介
NBD(Network Block Device)让你可以将一个远程主机的磁盘空间,当作一个块设备来使用.就像一块硬盘一样.
使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上.
NBD与NFS有所不同.NFS只是提供一个挂载点供客户端使用,客户端无法改变这个挂载点的分区格式.
而NBD提供的是一个块设备,客户端可以把这个块设备格式化成各种类型的分区.更便于用户的使用.
NBD是一个内核模块,大部分Linux发行版都已包含它.
二.NBD安装方法
在Turbolinux的10以上的版本中,NBD已被编译成模块.保存在
/lib/modules/$version/kernel/driver/block/下.
你还需要在服务器端和客户端上安装nbd-server和nbd-client工具.
你可以从官方网站上下载源码包,并分别在服务器端和客户端服务器上进行安装:
http://sourceforge.net/projects/nbd
我们这里下载nbd-2.8.8.tar.bz2
下载后,执行下列步骤进行安装:
# tar jxf nbd-2.8.8.tar.bz2# cd nbd-2.8.8# ./configure# make# make install
三.NBD使用方法
1.示例1: 服务器端提供单个映像文件到客户端
a.服务器端配置方法(IP为192.168.1.1)
你需要先建立一个磁盘映像文件,作为提供给客户端使用的块设备.我们制作一个300MB的文件当做块设备.# cd /var/tmp# dd if=/dev/zero of=nbd-disk0 bs=104857600 count=3 启动nbd-server,监听1234端口,使用nbd-disk0映像文件.# nbd-server 1234 /var/tmp/nbd-disk0查看nbd进程.# ps -ef | grep nbdroot 11292 1 0 15:02 ? 00:00:00 nbd-server 1234 /var/tmp/nbd-disk0nbd-server用法:nbd-server port file [size][kKmM] [-l authorize_file] [-r] [-m] [-c] [-a timeout_sec] port nbd-server监听端口. file 绑定的映像文件. size 在客户端所见的块设备大小(单位可以是: k,K,m,M).-r|--read-only只读模式,客户端无法在块设备上进行写操作.-m|--multi-file多个文件,可以将多个映像文件作为一个块设备提供给客户端.-c|--copy-on-write 所有客户端的写操作被会另存为一个文件,连接断开后,这个文件会被删除. 可以保证映像文件内容不会被修改.-l|--authorize-file file 一个允许访问此nbd的主机列表文件.-a|--idle-time服务器断开与客户端连接前的最大空闲时间.
b.客户端配置方法(IP为192.168.1.2)
加载nbd模块.# modprobe nbd# lsmod | grep nbdnbd 26400 0查看nbd设备是否建立.# ls /dev/nbd* -hlbrw-r----- 1 root disk 43, 0 Jul 27 06:40 /dev/nbd0brw-r----- 1 root disk 43, 1 Jul 27 06:40 /dev/nbd1brw-r----- 1 root disk 43, 2 Jul 27 06:40 /dev/nbd2brw-r----- 1 root disk 43, 3 Jul 27 06:40 /dev/nbd3brw-r----- 1 root disk 43, 4 Jul 27 06:40 /dev/nbd4brw-r----- 1 root disk 43, 5 Jul 27 06:40 /dev/nbd5brw-r----- 1 root disk 43, 6 Jul 27 06:40 /dev/nbd6brw-r----- 1 root disk 43, 7 Jul 27 06:40 /dev/nbd7brw-r----- 1 root disk 43, 8 Jul 27 06:40 /dev/nbd8brw-r----- 1 root disk 43, 9 Jul 27 06:40 /dev/nbd9将/dev/nbd0设备与主机连接.# nbd-client 192.168.1.1 1234 /dev/nbd0 Negotiation: ..size = 307200KBbs=1024, sz=307200nbd-client用法:nbd-client [bs=blocksize] host port nbd_device [-swap] bs 用于设置块大小,默认是1024,可以是512,1024.2048,4096 host 服务器的主机名或IP port 服务器的监听端口 nbd_device 映射到本地的哪个nbd设备(如: /dev/nbd0) -swap 指定nbd设备将用做swap空间nbd-client -d nbd_device 用于断开连接连接成功后,可以查看到nbd-client进程.# ps -ef | grep nbdroot 3156 1 0 06:44 pts/0 00:00:00 nbd-client 192.168.1.1 1234 /dev/nbd0使用前,需要格式化这个块设备.# mkfs.ext3 /dev/nbd0 mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)76912 inodes, 307200 blocks15360 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=6763315238 block groups8192 blocks per group, 8192 fragments per group2024 inodes per groupSuperblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185Writing inode tables: done Creating journal (8192 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 39 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.挂载这个块设备.# mkdir /mnt/nbd0# mount /dev/nbd0 /mnt/nbd0 # cd /mnt/nbd0# lslost+found复制/root目录到这个目录中.# cp /root . -rf # lslost+found root断开这个块设备.# umount /mnt/nbd0/# nbd-client -d /dev/nbd0 Disconnecting: que, disconnect, sock, doneKernel call returned: Broken pipeClosing: que, sock, done
2.示例2: 服务器端提供多个映像文件到客户端
a.服务器端配置
# cd /var/tmp# dd if=/dev/zero of=nbd-disk1 bs=104857600 count=3 记录了 3+0 的读入记录了 3+0 的写出314572800 字节 (315 MB) 已复制,0.584027 秒,539 MB/秒# dd if=/dev/zero of=nbd-disk2 bs=104857600 count=3 记录了 3+0 的读入记录了 3+0 的写出314572800 字节 (315 MB) 已复制,1.5128 秒,208 MB/秒# nbd-server 1234 /var/tmp/nbd-disk1 # nbd-server 1235 /var/tmp/nbd-disk1 # nbd-server 1236 /var/tmp/nbd-disk2# ps -ef | grep nbdroot 11292 1 0 15:02 ? 00:00:00 nbd-server 1234 /var/tmp/nbd-disk0root 11599 1 0 15:14 ? 00:00:00 nbd-server 1235 /var/tmp/nbd-disk1root 11606 1 0 15:14 ? 00:00:00 nbd-server 1236 /var/tmp/nbd-disk2
b.客户端配置
# lsmod | grep nbdnbd 24736 0 # ls /dev/nbd*/dev/nbd0 /dev/nbd11 /dev/nbd14 /dev/nbd3 /dev/nbd6 /dev/nbd9/dev/nbd1 /dev/nbd12 /dev/nbd15 /dev/nbd4 /dev/nbd7/dev/nbd10 /dev/nbd13 /dev/nbd2 /dev/nbd5 /dev/nbd8# nbd-client 192.168.1.1 1234 /dev/nbd0Negotiation: ..size = 307200KBbs=1024, sz=307200# nbd-client 192.168.1.1 1235 /dev/nbd1Negotiation: ..size = 307200KBbs=1024, sz=307200# nbd-client 192.168.1.1 1236 /dev/nbd2Negotiation: ..size = 307200KBbs=1024, sz=307200将nbd1格式化为vfat格式.# mkfs.vfat /dev/nbd1 mkfs.vfat 2.11 (12 Mar 2005)unable to get drive geometry, using default 255/63将nbd2格式化为ext2格式.# mkfs.ext2 /dev/nbd2 mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)76912 inodes, 307200 blocks15360 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=6763315238 block groups8192 blocks per group, 8192 fragments per group2024 inodes per groupSuperblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729, 204801, 221185Writing inode tables: done Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 21 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.挂载这3个块设备# cd /mnt# mkdir nbd1 nbd2# mount /dev/nbd0 nbd0# mount /dev/nbd1 nbd1# mount /dev/nbd2 nbd2# df -h Filesystem Size Used Avail Use% Mounted on/dev/nbd0 291M 11M 265M 4% /mnt/nbd0/dev/nbd1 300M 0 300M 0% /mnt/nbd1/dev/nbd2 291M 2.1M 274M 1% /mnt/nbd2# mount/dev/nbd0 on /mnt/nbd0 type ext3 (rw)/dev/nbd1 on /mnt/nbd1 type vfat (rw)/dev/nbd2 on /mnt/nbd2 type ext2 (rw)
http://www.turbolinux.com.cn/turbo/wiki/doku.php?do=export_xhtml&id=%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86:nbd_%E7%BD%91%E7%BB%9C%E5%9D%97%E8%AE%BE%E5%A4%87_%E7%9A%84%E4%BD%BF%E7%94%A8
基于LVM和NBD实现远程镜像
服务器:Ubuntu 11.04 IP:192.168.150.132 客户机:Ubuntu 11.04 IP:192.168.150.133
实验过程:服务器有一块物理盘sdb1,客户机有三块物理盘sdb5,sdb6,sdb7。镜像必须要有三块物理盘。sdb5和sdb1作为数据和副本,sdb6记录日志。本次实验将sdb1、sdb5、sdb6作为一个vg0,然后再vg0上建立镜像。其中sdb5和sdb1为数据和副本,sdb6为日志。
为了证明可靠性,将sdb5破坏。然后用sdb7代替sdb5恢复镜像。
从http://sourceforge.net/projects/nbd 下载nbd-3.0.tar.bz2 解压:tarjxfnbd-3.0.tar.bz2 cd nbd-3.0.tar.bz2 ./configure make
make install
如果出现错误按照错误提示安装相应的包: apt-get install libglib2.0-dev
然后重新./configure -> make->make install
nbd-server 1234/dev/sdb1
#将服务器端点的sdb1这个物理盘通过1234端口共享。
nbd-client 192.168.150.132 1234 /dev/nbd0
#通过设置服务器的IP将服务器的sdb1连接到本地的nbd0。这时客户机nbd0就相当于服务器的sdb1。
pvcreate/dev/nbd0 /dev/sdb{5,6,7}#创建4个lv
vgcreate vg0 /dev/nbd0 /dev/sdb5 /dev/sdb6 #将nbd0、sdb5、sdb6建成一个vg0
lvcreate–L 1G -m1 -n mirror vg0 /dev/nbd0 /dev/sdb5 /dev/sdb6 #创建大小为1G名称为mirror的镜像。这个镜像包括三部分:nbd0和sdb5为副本和数据,#sdb6为日志。注意nbd0在服务器上,sdb5和sdb6在本地。 mkfs.ext3 /dev/vg0/mirror mkdir /mirror
mount /dev/vg0/mirror /mirror cd /mirror
这时就可以操作这个镜像了。可以在mirror上建立一个文件: vim abc
#然后退出保存。这时abc这个文件分别在nbd0(其实就是服务器的sdb1)、sdb5上保存一份。
4、 破坏sdb5这个盘,然后用sdb7来恢复。
dd if=/dev/zero of=/dev/sdb5 count=10 #sdb5这时已经被破坏掉了。 lvs -a -o +devices #系统显示无法找到sdb5这个盘。 vgreduce --removemissing --force vg0 #移除sdb5 vgextend vg0 /dev/sdb7 #将sdb7加入到vg0中
lvconvert -m1 /dev/vg0/mirror /dev/nbd0 /dev/sdb7 /dev/sdb6 #用sdb7替代sdb5恢复镜像。这时nbd0和sdb7为副本和数据,sdb6为日志。 ll /mirror #查看到abc这个文件仍然存在。
- 基于LVM和NBD实现远程镜像
- LVM+NBD实现VM数据备份和迁移
- LVM逻辑卷实现磁盘镜像
- 通过qemu-nbd方式挂载qcow2镜像格式
- 使用qemu-nbd挂载qcow2镜像文件
- nbd挂载方式修改虚拟机镜像密码
- maven远程仓库和镜像
- maven远程仓库和镜像
- maven远程仓库和镜像
- maven远程仓库和镜像
- LVM磁盘镜像同步备份
- docker使用lvm卷存储镜像
- 软阵列和LVM实现
- 使用LVM配置镜像的逻辑卷
- 4.3【图像镜像】-------------基于Opencv实现-----图像的镜像变换
- 基于raid和lvm的gentoo安装笔记(一)
- iscsi 的lvm方式实现磁盘共享,以及lvm扩展和增加新的节点
- 远程镜像与备份SVN服务器
- js {} [] 的使用
- LeetCode: Unique Paths II
- 尝试用打印出一些形状这次是菱形
- 欧拉函数、费马定理、欧拉定理
- 如何来想,怎么去做(上)
- 基于LVM和NBD实现远程镜像
- Ubuntu13.10编译Android4.3源码(二)
- 写一个函数参数是一个int数值要求倒着输出这个数,要求用到递归算法。
- Android起始之路之一:git和svn的使用。
- 组合数计算(快速幂)
- ImageView 清空图片
- [Erlang危机](1.1)如何深入代码
- 2014-11-6Android学习------Spinner下拉选择框控件学习(二)---监听事件
- JAVA的protected权限