当前位置: 技术问答>linux和unix
如何在linux主机之间传送文件和文件块
来源: 互联网 发布时间:2016-06-09
本文导语: 这个帖子中包含的问题比较多,由于所做的内容以前没有涉及过,所以很生疏,请高手回答一下,先表示感谢! 非常感谢大家的意见和建议。我做的其实是一个磁盘的迁移项目,第一轮迁移整个磁盘,第二轮及以后采用循环...
这个帖子中包含的问题比较多,由于所做的内容以前没有涉及过,所以很生疏,请高手回答一下,先表示感谢!
非常感谢大家的意见和建议。我做的其实是一个磁盘的迁移项目,第一轮迁移整个磁盘,第二轮及以后采用循环拷贝的方法只迁移上一轮中被写脏的磁盘块,直到临界条件满足为止(如到达循环次数最大值、脏块数量小于某个阈值等)。而这个磁盘在源主机上是以.img文件的形式存在的,所以第一步要把这个img文件传送到目的主机;第二步就是把这个img形式的磁盘挂载上(利用losetup等命令);第三和第四步就是把上一轮迁移中写脏的块写入这个img文件的相应位置,从而保持此img文件总是最新的。
1.最近在做磁盘设备的迁移,需要把一台linux中的一个.img文件(一个linux系统的映像,大约2Gb)传送到另一台linux主机上。我首先
想用socket编程实现,请问具体怎样实现呢?
2.在上一步实现以后,要把这个.img文件绑定到loop设备上,从而当做一个磁盘来进行读写,在bash命令行下有相应的命令可以实现这
个功能,请问能否在我上一步把img文件传过来的时候,就在目的主机同步实现呢,用c实现。
3.如果在源主机不是发送的整个文件,而是这个img文件中的一部分在源主机被更新了,我们在内核中通过加入代码也记录下了被更新的
磁盘块,请问怎样编程实现把这些磁盘块传送到目的主机呢?
4.目的主机接收到了更新的磁盘块,也就是这个img文件中的某些块,请问怎样才能把这些块写入这个img文件的相应位置呢?
非常感谢高手的回答……还有很多的细节问题……期待中……
谢谢大家了,有什么想法大家提出来,我会认真聆听的……
非常感谢大家的意见和建议。我做的其实是一个磁盘的迁移项目,第一轮迁移整个磁盘,第二轮及以后采用循环拷贝的方法只迁移上一轮中被写脏的磁盘块,直到临界条件满足为止(如到达循环次数最大值、脏块数量小于某个阈值等)。而这个磁盘在源主机上是以.img文件的形式存在的,所以第一步要把这个img文件传送到目的主机;第二步就是把这个img形式的磁盘挂载上(利用losetup等命令);第三和第四步就是把上一轮迁移中写脏的块写入这个img文件的相应位置,从而保持此img文件总是最新的。
1.最近在做磁盘设备的迁移,需要把一台linux中的一个.img文件(一个linux系统的映像,大约2Gb)传送到另一台linux主机上。我首先
想用socket编程实现,请问具体怎样实现呢?
2.在上一步实现以后,要把这个.img文件绑定到loop设备上,从而当做一个磁盘来进行读写,在bash命令行下有相应的命令可以实现这
个功能,请问能否在我上一步把img文件传过来的时候,就在目的主机同步实现呢,用c实现。
3.如果在源主机不是发送的整个文件,而是这个img文件中的一部分在源主机被更新了,我们在内核中通过加入代码也记录下了被更新的
磁盘块,请问怎样编程实现把这些磁盘块传送到目的主机呢?
4.目的主机接收到了更新的磁盘块,也就是这个img文件中的某些块,请问怎样才能把这些块写入这个img文件的相应位置呢?
非常感谢高手的回答……还有很多的细节问题……期待中……
谢谢大家了,有什么想法大家提出来,我会认真聆听的……
|
1.用socket写一个客户端和服务器端,用标准的流IO,比如fread,fwrite。
2.用system()函数。
3.根据bitmap把数据通过socket传送到目的主机。
4.通过lseek定位,然后写入。
2.用system()函数。
3.根据bitmap把数据通过socket传送到目的主机。
4.通过lseek定位,然后写入。
|
1、可以采用标准的 tcp socket 通信,类似于 ftp client / ftp server,server 监听 xx 端口上的
连接请求;client 主动发起连接,并读取文件 img,发送文件信息(名字、长度);然后分块传输直至
传输完成;server 接收信息,依接收名字创建文件,然后接收文件直至结束。
2、一般来说,不这样做,而是在文件传输完成后才绑定。当然,也是可以实现;直接指定长度的文件、然后
绑定到 loop 设备上,mount 后直接进行读写。
3、更新也可以像 ftp 的支持断点续传一样,指定起始位置和长度进行更新;可以将磁盘块转换为文件形式;
当然也可以让 server 端支持这种磁盘块方式;
4、接收到磁盘块后,计算其在文件中的起始位置,然后定位到该位置,直接写...
不过 2/3/4 貌似有点儿冲突,绑定到 loop 设备后,一般要 mount 到某个目录,后续操作就都是基于文件
操作了,貌似没法进行类似磁盘块形式的操作...
连接请求;client 主动发起连接,并读取文件 img,发送文件信息(名字、长度);然后分块传输直至
传输完成;server 接收信息,依接收名字创建文件,然后接收文件直至结束。
2、一般来说,不这样做,而是在文件传输完成后才绑定。当然,也是可以实现;直接指定长度的文件、然后
绑定到 loop 设备上,mount 后直接进行读写。
3、更新也可以像 ftp 的支持断点续传一样,指定起始位置和长度进行更新;可以将磁盘块转换为文件形式;
当然也可以让 server 端支持这种磁盘块方式;
4、接收到磁盘块后,计算其在文件中的起始位置,然后定位到该位置,直接写...
不过 2/3/4 貌似有点儿冲突,绑定到 loop 设备后,一般要 mount 到某个目录,后续操作就都是基于文件
操作了,貌似没法进行类似磁盘块形式的操作...
|
1.最近在做磁盘设备的迁移,需要把一台linux中的一个.img文件(一个linux系统的映像,大约2Gb)传送到另一台linux主机上。我首先
想用socket编程实现,请问具体怎样实现呢?
..用socket还不如直接NFS实现呢.
2台linux主机间NFS很方便的.
你可以去鸟哥的主页看配置方法.
想用socket编程实现,请问具体怎样实现呢?
..用socket还不如直接NFS实现呢.
2台linux主机间NFS很方便的.
你可以去鸟哥的主页看配置方法.
|
通过网络传文件,肯定用TCP socket嘛.