1 前言
首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决。
之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕 "基于用户角度的Linux下的数据备份和迁移" 的场景,对Linux文件系统相关知识进行实地应用,产生生产力 。
在了解Linux文件系统之后,就可以 艺高人胆大 玩转Linux的文件目录了。
本文案例 --- "基于用户角度的Linux下的数据备份和迁移" 的使用场景描述如下:
发生在安装了新系统之后,需要将旧系统的数据进行复制或者是迁移,用户需要知道哪些数据是需要迁移的,哪些数据是需要备份的,以最小的代价实现文件的备份和迁移。
涉及的数据类型主要有:
- 用户多媒体文档数据
- 用户/系统 应用程序配置数据
- 用户/系统 应用程序执行文件
- 系统日志数据
2 FHS文件模型
在之前章节的文章里面提到过由 Linux Foundation 提出的对Linux各分支进行的文件目录的相关约定标准 : Linux的FHS(Filesystem Hierachy Standart)。
FHS把Linux的文件系统按照 "是否可变" 与 "是否可分享" 将所有目录大概分成四类:
shareable | unshareable | |
---|---|---|
static |
|
|
variable |
|
|
最大的基准分类框架就如上表所示。对于初识Linux的人来说,看到根目录下的一系列的文件肯定会感到困惑。所以完全有必要对FHS相关规定进行研究,这样有如下好处:
- 在使用或者开发Linux文件系统时,能了解Linux的设计标准,并在使用过程中尽量遵守准则
- 在接触并使用不同Linux分支时,即使Linux分支有万千,但也能万变不会离其宗,FHS不是“宗”之一
- 在进行系统级别数据迁移时,可以进行科学的选择性的迁移(比如,重装系统后的用户配置数据迁移)
- 在进行文件物理隔离存储时,可以根据“文件数据重要级别”或者“目录的潜在占用空间增长”进行合理物理分离存储或备份
- 在性能优化时,根据读写的频率,对不同目录分配不同存储设备(如:机械硬盘或者SSD固态硬盘)
- 在部署系统集群时,对于静态的可分享的目录,可以部署在某此只读存储器上,然后被需要的机器进行挂载,可以避免不必要的存储空间
3 用户数据
本文所指的用户数据是指,对比标准化的原生系统,由用户或者系统管理员在使用过程中产生的修改化配置或者安装的文件。
3.1 home
每新建一个用户,都会在此目录下面建立一个和用户名相同名称的目录,用于存储此用户产生的文件数据和用户个性化配置数据。
通过命令行列出所有的用户目录文件:
➜ ~ ls -a . .gconf .pip .Xauthority .. .Genymobile .pki .xinputrc .adobe .gimp-2.8 .profile .xmind .android .gitconfig proxychains-ng .xsession-errors .AndroidStudio1.3 .gksu.lock Public .xsession-errors.old .bash_history .gnome .PyCharm40 .zcompcache .bash_logout .gnome2 pycharm-config.jar .zcompdump .bashrc .gphoto record-demo-plus-hold.mp4 .zcompdump-zheng-desktop-5.0.2 .cache .gradle .sample-music .zsh_history .config .gstreamer-0.10 shortcuts-images .zshrc .cr3 .icons .ssh .zshrc.pre-oh-my-zsh .cxoffice .java .ssr .zsh-update .dbus .kingsoft Templates 公共的 .dde-dock-applets.ini KuaiPan Tencent Files 模板 Desktop .local .themes 视频 .dlockpid .macromedia .thumbnails 图片 .dmrc .mozilla .thunderbird 文档 Documents Music .viminfo 下载 Downloads .oh-my-zsh .viminfo.tmp 音乐 .esd_auth .pam_environment .wireshark 桌面 .filezilla Pictures .wiznote
如上主要分为如下几类文件:
- 用户通用文档文件
-
视频、图片、文档、下载、音乐、桌面
- 应用程序配置文件
-
和桌面应用程序相关的程序的配置文件,以 . 点号开头,默认的隐藏文件,例如:
- .adobe 是 pdf阅读器 adobe 应用程序的配置文件目录
- .filezilla 是FTP客户端程序 filezilla 配置文件目录
- 其它。。。
- 用户环境变量配置文件
-
- .profile
-
对应用户登录的时候,会加载的环境变量
- .bashrc
-
每次使用当前用户开启 bash shell 的时候要执行的脚本
在用户数据迁移的时候,很关心的是应用程序的配置信息,关于用户应用程序配置文件的目录有两个地方:
- /home/xxx 目录下的以点号开头的隐藏文件
- /home/xxx/.config 目录下的文件
用户目录下的隐藏配置文件,前端已经介绍,在 .config 目录下面还有一些:
➜ .config cd /home/zheng/.config ➜ .config ls -a . deepin_monitors.json eog htop Pencil Trolltech.conf .. deepin-movie fcitx ipython pulse ubuntukylin autostart deepin-software-center fcitx-qimpanel kingsoft QtProject.conf user-dirs.dirs bleachbit deepin-terminal geany Kingsoft ReText project user-dirs.locale calibre deepin-ui gedit launcher robomongo yelp chromium desktop Genymobile liteide shutdown youdao-dict compiz-1 dock git matplotlib SogouPY zone dconf Dolezel google-chrome menus SogouPY.users dde-daemon dra gtk-2.0 nautilus sogou-qimpanel deepin DUI gtk-3.0 not_first_run_dde sublime-text-2
用户所安装的主要的桌面应用程序的配置文件都在此处,例如:
- kingsoft
-
金山办公套件配置文件
- google-chrome
-
谷歌Chrome浏览器的用户配置及用户数据存储目录
- robomongo
-
mongodb数据库的客户端操作软件
说了这么多,这些配置文件具体有什么作用呢?举两个最简单的例子:
- FTP客户端软件 filezilla
- mongodb数据库客户端软件 robomongo
如果做系统管理员,必然会少不了使用相应的客户端软件来管理多个服务器( 文件服务器 或者 数据库服务器 ),在用户使用Linux Desktop的过程中,有些客户端软件会不断的积累应用程序配置文件,例如:
FTP客户端配置数据:
Mongodb客户端配置数据:
如果将上述提到的配置目录复制到新的机器下面,再打开相应的客户端软件的时候,这些配置信息都会跟随着迁移过去(其实本质上是里面的配置文本数据迁移过去了,此处为了简便,干脆整个目录一起迁移过去了)
3.2 etc
关于etc目录的全称,比较公认的说法是 Editable Text Config :可编辑的文本配置文件。
里面主要存放系统运行时所用到的一些文本配置文件。例如:除去用户密码这些信息外,基本上所有的和服务器应用程序相关的配置文件都存放在此处。关于此目录下具体的文件的意义,此处也不再赘述,在进行迁移和备份的时候,需要择取所需要的配置文件进行迁移备份即可。
如果是Linux服务器系统管理员,打交道最多的目录应该就是 etc 目录了,搭建各种服务器必然要处理的配置目录。
3.3 opt
通过命令行,查看此目录下的文件:
➜ /opt ls -a . .. cxoffice deepin-boot-maker google kingsoft Point ubuntukylin
此目录是部分应用程序的安装目录,一般情况是指通过 deb/rpm 文件或者是 make 的方式安装的时候,应用程序的目录会放在此处。
例如:
- google/chrome
-
chrome浏览器安装目录
- kingsoft/wps-office
-
金山办公套件应用程序安装目录
这些应用程序都通过 deb 包安装的。
3.4 var
var目录主要存放一些经常变化的数据,例如:
-
邮件数据
- log
-
系统应用程序或者用户应用程序的日志,主要是文本文件。
这一块是随着系统不断运行的过程中会不断变化的。这一块的数据不是系统运行所必须的,但是对于系统管理员排查应用程序运行中的状态值很有帮助。
3.5 usr
usr的全称是 Unix Software Resource ,专门用来存放Unix系统的安装软件,在/opt目录不同的是,此目录一般存放的是通过 命令行安装的应用程序,例如,在ubuntu下面一般存放的是通过 apt-get install 安装的应用程序。
此目录下的主要文件目录如下:
➜ /usr ls -a . .. bin games include lib local sbin share src
基本上,只要将此目录迁移到新系统中,旧系统中通过 apt-get install 安装的应用程序也会迁移过去了。
4 文件迁移命令
使用rsync命令可以实现文件的同步迁移。
使用 man rsync 命令可以查看rsync的具体用法:
NAME rsync - a fast, versatile, remote (and local) file-copying tool SYNOPSIS Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync 是一种极其快速而且万能的复制工具,主要功能如下:
- 本地A目录往B目录同步复制文件(local copy)
- 本地A目录往远程RB目录同步复制push文件(remote push )
- 远程RC目录往本地A目录同步复制pull文件(remote pull )
主要的 OPTION 参数可以通过 man rsync 命令查看
在本文中向新的系统做数据迁移时主要用到的是归档功能,相应的命令如下:
rsync -avzP src_dir dest_dir
- a archive 称为归档模式,执行以下操作
-
- 递归模式
- 保留符号链接
- 保留权限
- 保留时间标记
- 保留用户名及组名
-
v verbose 输入命令执行的中间过程
-
z compress 对同步中的文件进行压缩传送(相当以耗费CPU计算资源来节省传送的IO成本)
-
P progress 传送过程中的详细进度百分比
一般情况下,只需要使用 rsync 命令,将用户所需要迁移的数据进行相应的目录同步拷贝即可。
5 小结和展望
Linux系统下面没有Windows系统下所谓的注册表。可以将Linux系统理解为一个“纯绿色”的软件安装系统。至于为何有些程序可以直接(不需要指定路径)通过命令行的方式启动,有些则不能,这个和“注册表”无关,只是因为此应用程序如果采用标准安装方式,系统会在环境变量PATH 目录下面生成一个软链接而已。
通过Linux的文件迁移实验,可以清楚了解Linux文件系统中的各种文件是如何各司其责,并存放在相应的目录下的,然后就不会产生“因为不了解,所以害怕”的为难情绪了。
关于迁移到新系统后,应用程序如何迁移,本文提供的是直接文件级别的复制,还有一种自动化的方法就是基于命令行的批处理文件的执行安装,如果有比较快速的网络,推荐执行命令行自动化安装(后面会奉上文章)。
作者: | Harmo哈莫 |
---|---|
作者介绍: | https://zhengwh.github.io |
技术博客: | http://www.cnblogs.com/beer |
Email: | dreamzsm@gmail.com |
QQ: | 1295351490 |
时间: | 2015-10-02 |
版权说明: | 未经许可,严禁用于商业目的的非法传播 |
联系或打赏: | http://zhengwh.github.io/contact-donate.html |