Linux文件系統應用---系統數據備份和遷移(用戶角度)

1   前言

首先承諾:對於從Windows系統遷移過來的用戶,困擾你們的  「Linux系統下是否能夠把系統文件和用戶文件分開到C盤和D盤中」 的問題也能夠獲得完滿解決。html

以前的文章對Linux的文件系統有過粗略的介紹,可是瞭解文件系統結構後,有什麼用途呢?在本章節將圍繞 "基於用戶角度的Linux下的數據備份和遷移" 的場景,對Linux文件系統相關知識進行實地應用,產生生產力 。前端

在瞭解Linux文件系統以後,就能夠 藝高人膽大 玩轉Linux的文件目錄了。java

本文案例 --- "基於用戶角度的Linux下的數據備份和遷移" 的使用場景描述以下:python

發生在安裝了新系統以後,須要將舊系統的數據進行復制或者是遷移,用戶須要知道哪些數據是須要遷移的,哪些數據是須要備份的,以最小的代價實現文件的備份和遷移。android

涉及的數據類型主要有:git

  • 用戶多媒體文檔數據
  • 用戶/系統 應用程序配置數據
  • 用戶/系統 應用程序執行文件
  • 系統日誌數據

2   FHS文件模型

在以前章節的文章裏面提到過由 Linux Foundation 提出的對Linux各分支進行的文件目錄的相關約定標準 : Linux的FHS(Filesystem Hierachy Standart)。github

FHS把Linux的文件系統按照 "是否可變" 與 "是否可分享" 將全部目錄大概分紅四類:mongodb

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

最大的基準分類框架就如上表所示。對於初識Linux的人來講,看到根目錄下的一系列的文件確定會感到困惑。因此徹底有必要對FHS相關規定進行研究,這樣有以下好處:chrome

  • 在使用或者開發Linux文件系統時,能瞭解Linux的設計標準,並在使用過程當中儘可能遵照準則
  • 在接觸並使用不一樣Linux分支時,即便Linux分支有萬千,但也能萬變不會離其宗,FHS不是「宗」之一
  • 在進行系統級別數據遷移時,能夠進行科學的選擇性的遷移(好比,重裝系統後的用戶配置數據遷移)
  • 在進行文件物理隔離存儲時,能夠根據「文件數據重要級別」或者「目錄的潛在佔用空間增加」進行合理物理分離存儲或備份
  • 在性能優化時,根據讀寫的頻率,對不一樣目錄分配不一樣存儲設備(如:機械硬盤或者SSD固態硬盤)
  • 在部署系統集羣時,對於靜態的可分享的目錄,能夠部署在某此只讀存儲器上,而後被須要的機器進行掛載,能夠避免沒必要要的存儲空間

3   用戶數據

本文所指的用戶數據是指,對比標準化的原生系統,由用戶或者系統管理員在使用過程當中產生的修改化配置或者安裝的文件。shell

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
相關文章
相關標籤/搜索