Linux文件系统应用---系统数据备份和迁移(用户角度)

1   前言

首先承诺:对于从Windows系统迁移过来的用户,困扰大家的  “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决。

之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕 "基于用户角度的Linux下的数据备份和迁移" 的场景,对Linux文件系统相关知识进行实地应用,产生生产力 。

在了解Linux文件系统之后,就可以 艺高人胆大 玩转Linux的文件目录了。

本文案例 --- "基于用户角度的Linux下的数据备份和迁移" 的使用场景描述如下:

发生在安装了新系统之后,需要将旧系统的数据进行复制或者是迁移,用户需要知道哪些数据是需要迁移的,哪些数据是需要备份的,以最小的代价实现文件的备份和迁移。

涉及的数据类型主要有:

  • 用户多媒体文档数据
  • 用户/系统 应用程序配置数据
  • 用户/系统 应用程序执行文件
  • 系统日志数据

2   FHS文件模型

在之前章节的文章里面提到过由 Linux Foundation 提出的对Linux各分支进行的文件目录的相关约定标准 : Linux的FHS(Filesystem Hierachy Standart)。

FHS把Linux的文件系统按照 "是否可变" 与 "是否可分享" 将所有目录大概分成四类:

 shareableunshareable
static
  • /usr
  • /opt
  • /etc
  • /boot
variable
  • /var/mail
  • /var/spool/news
  • /var/run
  • /var/lock

最大的基准分类框架就如上表所示。对于初识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目录主要存放一些经常变化的数据,例如:

  • mail

    邮件数据

  • 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
posted @ 2015-10-06 10:59  一点一滴的Beer  阅读(9885)  评论(0编辑  收藏  举报