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. Getting Started With Hazelcast 读书笔记(第八章-第十章)

    第八章到第十章就是一些介绍性的描述,吹的就是Hazelcast能使用在各种地方..   第八章 -从外面看 1.Hazelcast做了一个memcache的java实现,方便py和php使用. 2.可 ...

  2. nfs:环境搭建

    准备环境 通过VirtualBox创建两台虚拟机client1和client2,这两台虚拟机和物理主机组成一个网络.将物理主机作为NFS的服务端,虚拟机client1和client2作为NFS的客户端 ...

  3. ASCII、Unicode、GBK和UTF-8字符编码的区别联系

    转自http://dengo.org/archives/901 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称 ...

  4. Hibernate简介

    Hibernate是一个面向JAVA环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去 ,Hibernate的目标主要是为了释放开发者通常的数据持久化相关的 ...

  5. Linux添加/删除用户和用户组

    声明:现大部分文章为寻找问题时在网上相互转载,在此博客中做个记录,方便自己也方便有类似问题的朋友,故原出处已不好查到,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 本文总结了Li ...

  6. 表单验证插件 - formValidator

    表单验证插件 - formValidator * 引入formValidator插件文件 * 引入formValidator插件的主文件 * 引入formValidator插件的正则有关文件 * 引入 ...

  7. group_concat函数详解

    来自: http://hchmsguo.iteye.com/blog/555543 MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的 ...

  8. Win7 64位 VS2013环境编译Lua5.3.1

    主要参考这篇文章,原文有几个错误顺便改正了. 在Windows下使用Visual Studio编译Lua5.3 写本文时Lua官方网站放出的新版本为5.3.1,然后我不知道为啥,神奇的国内不能访问Lu ...

  9. java 单利模式

    首先何为单利模式: 单利模式即多次调用同一个对象的时候,只有一个实例(这里所谓的实例就是,假如创建了两个对象,它们的hashCode相同) 下面是相关代码: 1 创建一个对象Singleton类 pa ...

  10. 解决Ubuntu下Chrome浏览器网页中文字体混乱

    在Ubuntu下使用Chrome浏览器时碰到了网页中文字体混乱的现象: 黑体和楷体混杂,看起来非常不美观. 这是由于许多网页并没有指定字体,然后浏览器将调用系统默认字体配置. 首先,安装文泉驿字体: ...