<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 8.6 其他常見的壓縮與備份工具 還有一些很好用的工具得要跟大家介紹介紹,尤其是 dd 這個玩意兒呢! ### 8.6.1 dd 我們在[第七章當中的特殊 loop 設備掛載時](../Text/index.html#loop)使用過 dd 這個指令對吧? 不過,這個指令可不只是制作一個文件而已喔~這個 dd 指令最大的功效,鳥哥認為,應該是在于“備份”啊! 因為 dd 可以讀取磁盤設備的內容(幾乎是直接讀取扇區"sector"),然后將整個設備備份成一個文件呢!真的是相當的好用啊~ dd 的用途有很多啦~但是我們僅講一些比較重要的選項,如下: ``` [root@study ~]# dd if="input_file" of="output_file" bs="block_size" count="number" 選項與參數: if :就是 input file 啰~也可以是設備喔! of :就是 output file 喔~也可以是設備; bs :規劃的一個 block 的大小,若未指定則默認是 512 Bytes(一個 sector 的大小) count:多少個 bs 的意思。 范例一:將 /etc/passwd 備份到 /tmp/passwd.back 當中 [root@study ~]# dd if=/etc/passwd of=/tmp/passwd.back 4+1 records in 4+1 records out 2092 Bytes (2.1 kB) copied, 0.000111657 s, 18.7 MB/s [root@study ~]# ll /etc/passwd /tmp/passwd.back -rw-r--r--. 1 root root 2092 Jun 17 00:20 /etc/passwd -rw-r--r--. 1 root root 2092 Jul 2 23:27 /tmp/passwd.back # 仔細的看一下,我的 /etc/passwd 文件大小為 2092 Bytes,因為我沒有設置 bs , # 所以默認是 512 Bytes 為一個單位,因此,上面那個 4+1 表示有 4 個完整的 512 Bytes, # 以及未滿 512 Bytes 的另一個 block 的意思啦!事實上,感覺好像是 cp 這個指令啦~ 范例二:將剛剛燒錄的光驅的內容,再次的備份下來成為圖像擋 [root@study ~]# dd if=/dev/sr0 of=/tmp/system.iso 177612+0 records in 177612+0 records out 90937344 Bytes (91 MB) copied, 22.111 s, 4.1 MB/s # 要將數據抓下來用這個方法,如果是要將鏡像文件寫入 USB 磁盤,就會變如下一個范例啰! 范例三:假設你的 USB 是 /dev/sda 好了,請將剛剛范例二的 image 燒錄到 USB 磁盤中 [root@study ~]# lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 2G 0 disk # 確實是 disk 而且有 2GB 喔! [root@study ~]# dd if=/tmp/system.iso of=/dev/sda [root@study ~]# mount /dev/sda /mnt [root@study ~]# ll /mnt dr-xr-xr-x. 131 root root 34816 Jun 26 22:14 etc dr-xr-xr-x. 5 root root 2048 Jun 17 00:20 home dr-xr-xr-x. 8 root root 4096 Jul 2 18:48 root # 如果你不想要使用 DVD 來作為開機媒體,那可以將鏡像文件使用這個 dd 寫入 USB 磁盤, # 該磁盤就會變成跟可開機光盤一樣的功能!可以讓你用 USB 來安裝 Linux 喔!速度快很多! 范例四:將你的 /boot 整個文件系統通過 dd 備份下來 [root@study ~]# df -h /boot Filesystem Size Used Avail Use% Mounted on /dev/vda2 1014M 149M 866M 15% /boot # 請注意!備份的容量會到 1G 喔! [root@study ~]# dd if=/dev/vda2 of=/tmp/vda2.img [root@study ~]# ll -h /tmp/vda2.img -rw-r--r--. 1 root root 1.0G Jul 2 23:39 /tmp/vda2.img # 等于是將整個 /dev/vda2 通通捉下來的意思~所以,文件大小會跟整顆磁盤的最大量一樣大! ``` 其實使用 dd 來備份是莫可奈何的情況,很笨耶!因為默認 dd 是一個一個扇區去讀/寫的,而且即使沒有用到的扇區也會倍寫入備份文件中! 因此這個文件會變得跟原本的磁盤一模一樣大!不像使用 xfsdump 只備份文件系統中有使用到的部份。不過, dd 就是因為不理會文件系統, 單純有啥紀錄啥,因此不論該磁盤內的文件系統你是否認識,它都可以備份、還原的!所以,鳥哥認為,上述的第三個案例是比較重要的學習喔! 例題:你想要將你的 /dev/vda2 進行完整的復制到另一個 partition 上,請使用你的系統上面未分區完畢的容量再創建一個與 /dev/vda2 差不多大小的分區 (只能比 /dev/vda2 大,不能比他小!),然后將之進行完整的復制 (包括需要復制 boot sector 的區塊)。答:因為我們的 /dev/sda 也是個測試的 USB 磁盤,可以隨意惡搞!我們剛剛也才測試過將光盤鏡像文件給它復制進去而已。 現在,請你分區 /dev/sda1 出來,然后將 /dev/vda2 完整的拷貝進去 /dev/sda1 吧! ``` # 1\. 先進行分區的動作 [root@study ~]# fdisk /dev/sda Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4195455, default 2048): Enter Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4195455, default 4195455): Enter Using default value 4195455 Partition 1 of type Linux and of size 2 GiB is set Command (m for help): p Device Boot Start End Blocks Id System /dev/sda1 2048 4195455 2096704 83 Linux Command (m for help): w [root@study ~]# partprobe # 2\. 不需要格式化,直接進行 sector 表面的復制! [root@study ~]# dd if=/dev/vda2 of=/dev/sda1 2097152+0 records in 2097152+0 records out 1073741824 Bytes (1.1 GB) copied, 71.5395 s, 15.0 MB/s [root@study ~]# xfs_repair -L /dev/sda1 # 一定要先清除一堆 log 才行! [root@study ~]# uuidgen # 下面兩行在給予一個新的 UUID 896c38d1-bcb5-475f-83f1-172ab38c9a0c [root@study ~]# xfs_admin -U 896c38d1-bcb5-475f-83f1-172ab38c9a0c /dev/sda1 # 因為 XFS 文件系統主要使用 UUID 來分辨文件系統,但我們使用 dd 復制,連 UUID # 也都復制成為相同!當然就得要使用上述的 xfs_repair 及 xfs_admin 來修訂一下! [root@study ~]# mount /dev/sda1 /mnt [root@study ~]# df -h /boot /mnt Filesystem Size Used Avail Use% Mounted on /dev/vda2 1014M 149M 866M 15% /boot /dev/sda1 1014M 149M 866M 15% /mnt # 這兩個玩意兒會“一模一樣”喔! # 3\. 接下來!讓我們將文件系統放大吧!!! [root@study ~]# xfs_growfs /mnt [root@study ~]# df -h /boot /mnt Filesystem Size Used Avail Use% Mounted on /dev/vda2 1014M 149M 866M 15% /boot /dev/sda1 2.0G 149M 1.9G 8% /mnt [root@study ~]# umount /mnt ``` 非常有趣的范例吧!新分區出來的 partition 不需要經過格式化,因為 dd 可以將原本舊的 partition 上面,將 sector 表面的數據整個復制過來! 當然連同 superblock, boot sector, meta data 等等通通也會復制過來!是否很有趣呢?未來你想要創建兩顆一模一樣的磁盤時, 只要下達類似: dd if=/dev/sda of=/dev/sdb ,就能夠讓兩顆磁盤一模一樣,甚至 /dev/sdb 不需要分區與格式化, 因為該指令可以將 /dev/sda 內的所有數據,包括 MBR 與 partition table 也復制到 /dev/sdb 說! ^_^ 話說,用 dd 來處理這方面的事情真的是很方便,你也不需考慮到啥有的沒的,通通是磁盤表面的復制而已!不過如果真的用在文件系統上面, 例如上面這個案例,那么再次掛載時,恐怕得要理解一下每種文件系統的掛載要求!以上面的案例來說,你就得要先清除 XFS 文件系統內的 log 之后, 重新給予一個跟原本不一樣的 UUID 后,才能夠順利掛載!同時,為了讓系統繼續利用后續沒有用到的磁盤空間,那個 xfs_growfs 就得要理解一下。 關于 xfs_growfs 我們會在后續第十四章繼續強調!這里先理解即可。 ### 8.6.2 cpio 這個指令挺有趣的,因為 cpio 可以備份任何東西,包括設備設備文件。不過 cpio 有個大問題, 那就是 cpio 不會主動的去找文件來備份!啊!那怎辦?所以啰,一般來說, cpio 得要配合類似 [find](../Text/index.html#find) 等可以找到文件名的指令來告知 cpio 該被備份的數據在哪里啊! 有點小麻煩啦~因為牽涉到我們在第三篇才會談到的[數據流重導向](../Text/index.html#redirect)說~ 所以這里你就先背一下語法,等到第三篇講完你就知道如何使用 cpio 啰! ``` [root@study ~]# cpio -ovcB &gt; [file&#124;device] &lt;==備份 [root@study ~]# cpio -ivcdu &lt; [file&#124;device] &lt;==還原 [root@study ~]# cpio -ivct &lt; [file&#124;device] &lt;==察看 備份會使用到的選項與參數: -o :將數據 copy 輸出到文件或設備上 -B :讓默認的 Blocks 可以增加至 5120 Bytes ,默認是 512 Bytes !     這樣的好處是可以讓大文件的儲存速度加快(請參考 i-nodes 的觀念) 還原會使用到的選項與參數: -i :將數據自文件或設備 copy 出來系統當中 -d :自動創建目錄!使用 cpio 所備份的數據內容不見得會在同一層目錄中,因此我們 必須要讓 cpio 在還原時可以創建新目錄,此時就得要 -d 選項的幫助! -u :自動的將較新的文件覆蓋較舊的文件! -t :需配合 -i 選項,可用在"察看"以 cpio 創建的文件或設備的內容 一些可共享的選項與參數: -v :讓儲存的過程中文件名稱可以在屏幕上顯示 -c :一種較新的 portable format 方式儲存 ``` 你應該會發現一件事情,就是上述的選項與指令中怎么會沒有指定需要備份的數據呢?還有那個大于 (&gt;) 與小于 (&lt;) 符號是怎么回事啊?因為 cpio 會將數據整個顯示到屏幕上,因此我們可以通過將這些屏幕的數據重新導向 (&gt;) 一個新的文件! 至于還原呢?就是將備份文件讀進來 cpio (&lt;) 進行處理之意!我們來進行幾個案例你就知道啥是啥了! ``` 范例:找出 /boot 下面的所有文件,然后將他備份到 /tmp/boot.cpio 去! [root@study ~]# cd / [root@study /]# find boot -print boot boot/grub boot/grub/splash.xpm.gz ....(以下省略).... # 通過 find 我們可以找到 boot 下面應該要存在的文件名!包括文件與目錄!但請千萬不要是絕對路徑! [root@study /]# find boot &#124; cpio -ocvB &gt; /tmp/boot.cpio [root@study /]# ll -h /tmp/boot.cpio -rw-r--r--. 1 root root 108M Jul 3 00:05 /tmp/boot.cpio [root@study ~]# file /tmp/boot.cpio /tmp/boot.cpio: ASCII cpio archive (SVR4 with no CRC) ``` 我們使用 find boot 可以找出文件名,然后通過那條管線 (|, 亦即鍵盤上的 shift+\ 的組合), 就能將文件名傳給 cpio 來進行處理!最終會得到 /tmp/boot.cpio 那個文件喔!你可能會覺得奇怪,為啥鳥哥要先轉換目錄到 / 再去找 boot 呢? 為何不能直接找 /boot 呢?這是因為 cpio 很笨!它不會理會你給的是絕對路徑還是相對路徑的文件名,所以如果你加上絕對路徑的 / 開頭, 那么未來解開的時候,它就一定會覆蓋掉原本的 /boot 耶!那就太危險了!這個我們在 tar 也稍微講過那個 -P 的選項!!理解吧! 好了,那接下來讓我們來進行解壓縮看看。 ``` 范例:將剛剛的文件給他在 /root/ 目錄下解開 [root@study ~]# cd ~ [root@study ~]# cpio -idvc &lt; /tmp/boot.cpio [root@study ~]# ll /root/boot # 你可以自行比較一下 /root/boot 與 /boot 的內容是否一模一樣! ``` 事實上 cpio 可以將系統的數據完整的備份到磁帶機上頭去喔!如果你有磁帶機的話! * 備份:find / | cpio -ocvB &gt; /dev/st0 * 還原:cpio -idvc &lt; /dev/st0 這個 cpio 好像不怎么好用呦!但是,他可是備份的時候的一項利器呢!因為他可以備份任何的文件, 包括 /dev 下面的任何設備文件!所以他可是相當重要的呢!而由于 cpio 必需要配合其他的程序,例如 find 來創建文件名,所以 cpio 與管線命令及數據流重導向的相關性就相當的重要了! 其實系統里面已經含有一個使用 cpio 創建的文件喔!那就是 /boot/initramfs-xxx 這個文件啦!現在讓我們來將這個文件解壓縮看看,看你能不能發現該文件的內容為何? ``` # 1\. 我們先來看看該文件是屬于什么文件格式,然后再加以處理: [root@study ~]# file /boot/initramfs-3.10.0-229.el7.x86_64.img /boot/initramfs-3.10.0-229.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC) [root@study ~]# mkdir /tmp/initramfs [root@study ~]# cd /tmp/initramfs [root@study initramfs]# cpio -idvc &lt; /boot/initramfs-3.10.0-229.el7.x86_64.img . kernel kernel/x86 kernel/x86/microcode kernel/x86/microcode/GenuineIntel.bin early_cpio 22 blocks # 瞧!這樣就將這個文件解開啰!這樣了解乎? ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看