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

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

/usr /opt

/etc /boot

variable

/var/mail /var/spool/news

/var/run /var/lock

  • /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

Email:

dreamzsm@gmail.com

QQ:

1295351490

时间:

2015-10-02

版权说明:

未经许可,严禁用于商业目的的非法传播

联系或打赏:

http://zhengwh.github.io/contact-donate.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ascii0x03的安全笔记

【C++】小心使用文件读写模式:回车('\r') 换行('\n')问题的一次纠结经历

原来没有仔细注意C++读写文件的二进制模式和文本模式,这次吃了大亏。(平台:windows  VS2012) BUG出现: 写了一个程序A,生成一个文本文件F保...

3487
来自专栏企鹅号快讯

python-IDLE清屏和标记行数,其他推荐

——python—— 自定义IDLE清屏键 将网上下载的ClearWindow.py,放到python安装路径的lib\idlelib文件夹中,然后在这个文件夹...

2597
来自专栏Java后端技术

谈谈Linux下的数据流重定向和管道命令

  1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘。

872
来自专栏西枫里博客

thinkPHP5模版页面volist循环offset不能使用变量

有这样一个应用场景:当volist循环需要排除前面几个数据的时候,我们通常使用offset来操作。而假设前面要排除的数据是根据当前页面占位符来确定的,而需要排除...

772
来自专栏noteless

-1-0 Java 简介 java是什么 java简单介绍

了解 Java 技术  https://www.java.com/zh_CN/about/

972
来自专栏IMWeb前端团队

JavaScript强化教程——AngularJS 指令

本文为 H5EDU 机构官方 HTML5培训 AngularJS 通过被称为 指令 的新属性来扩展 HTML。 AngularJS 通过内置的指令来为应用添加功...

20110
来自专栏前端知识分享

第217天:深入理解Angular双向数据绑定的原理

双向绑定是新的前端框架中频繁出现的一个新词汇,也是mvvm的核心原理。angularjs五条核心信念中的数据驱动,便是由双向绑定进行完成。

1292
来自专栏瓜大三哥

Matlab基本语法7

基本编程技巧 脚本m文件和函数m文件,脚本是一系列命令、语句的简单组合。脚本文件中的变量都是全局变量,程序运行后,这些变量保存在matlab的基本工作空间内,一...

2429
来自专栏深度学习计算机视觉

同步、异步、阻塞、非阻塞

同步、异步、阻塞和非阻塞(网络编程) 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 按照这个定义,其实绝大多数函数都是同步调用...

2975
来自专栏代码世界

Python之协程

前言         在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建...

2877

扫码关注云+社区