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

最大的基准分类框架就如上表所示。对于初识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

Linux文件系统应用---系统数据备份和迁移(用户角度)的更多相关文章

  1. LVM+NBD实现VM数据备份和迁移

    在云系统的高可用性中,VM层的高可用性尤为关键,其中又涉及到了VM本身数据的备份和迁移的问题.在现有的平台上,每一个VM的数据放在一个单独的LV(逻辑卷)上,VM数据的备份可通过备份其所在的LV来完成 ...

  2. Serv-U 的升级及数据备份和迁移【转】

    Serv-U 配置备份   在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...

  3. MySQL数据备份/导出 创建用户及其删除

    Mysql DCL 创建用户 create user '用户名'@'localhost(本机访问)/%(通配符任何ip地址都可访问本机) 分配权限 grant 权限 on 数据库.表名 to '用户名 ...

  4. DEDECMS网站数据备份还原教程

    备份织梦网站数据 dedecms备份教程 进入DedeCms后台 -> 系统 -> 数据库备份/还原 备份文件在\data\backupdata 下载数据库备份资料\data\backup ...

  5. linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份

    文件处理 1.处理方式 匹配 正则表达式 egrep awk sed 2.文件中的处理字符 \n  新行符 换行 \t  制表符 tab键 缺省8个空格 \b  退格符 backspace键 退格键 ...

  6. Linux 中我该如何备份系统

    系统备份概述 在前面的一些文章中,我反复提到经常会把系统搞崩溃,所以备份系统就是一件不容忽视的事情.由于 Linux 系统本身的优越性,系统的备份和还原还是比较容易的.主要表现在以下方面: Linux ...

  7. Linux服务器数据备份恢复策略

    一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...

  8. Linux tar命令高级用法——备份数据

    Linux tar命令高级用法——备份数据 2015-12-31 Linux学习 Linux上有功能强大的tar命令,tar最初是为了制作磁带备份(tape archive)而设计的,它的作用是把文件 ...

  9. linux下的数据备份工具rsync讲解

    linux下的数据备份工具 rsync(remote sync 远程同步)   名词解释: sync(Synchronize,即“同步”)为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的 ...

随机推荐

  1. Java 内部类摘抄

    关于Java的内部类,要说的东西实在太多,这篇博文中也无法一一具体说到,所以就挑些重点的讲.关于内部类的使用,你可能会疑问,为什么我们要使用内部类?为了回答这个问题,你需要知道一些关于内部类的重点.所 ...

  2. IE插件BHO

    一丶接口IObjectWithSite //BHO项目(类库)添加引用两个COM //Microsoft HTML Object Library, Microsoft Internet Control ...

  3. 注册表信息(安装包ProductCode,设置启动运行)

    一.获取安装包ProductCode后,再获取安装包DisplayVersion,比对安装包版本,确定是否更新当前应用(重新下载安装包,并运行安装包) //获取当前应用程序的安装包的ProductCo ...

  4. CSV的导入导出

    using System; using System.Data; using System.IO; namespace COMMON { public class CSVhelperClass { / ...

  5. 【温故Delphi】GAEA用到Win32 API目录

    Delphi是Windows平台下著名的快速应用程序开发工具,它在VCL中封装并使用了大量的Win32 API. GAEA基于VCL开发的工具类产品,在程序中使用了大量的Win32 API,将经常用到 ...

  6. ubuntu 安装JAVA jdk的两种方法:

    ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 使用pp ...

  7. vi/vim使用进阶: vimrc初步

    本节所用命令的帮助入口: :help compatible :help mapleader :help map :help autocmd 当vim在启动时,如果没有找到vimrc或gvimrc,它缺 ...

  8. [转]MySQL关键性能监控(QPS/TPS)

    原文链接:http://www.cnblogs.com/chenty/p/5191777.html 工作中尝尝会遇到各种数据库性能调优,除了查看某条SQL执行时间长短外,还需要对系统的整体处理能力有更 ...

  9. Asp.Net 利用反射获得委托和事件以及创建委托实例和添加事件处理程序

    子程序定义: public delegate void CurrentControlListenEvent(string uniqueID, string way = null); public ev ...

  10. JS无刷新分页插件

    本文介绍一个本人自己写的一JS分页插件 <script src="/Js/smart.page.min.js" type="text/javascript" ...