首頁 >系統教程 >Linux >Linux dd指令解析: 資料備份及格式轉換的實例詳解

Linux dd指令解析: 資料備份及格式轉換的實例詳解

王林
王林轉載
2024-01-05 15:46:121078瀏覽

dd 指令主要用來進行資料備份,並且可以在備份的過程中進行格式轉換。其實 dd 指令可以把來源資料複製成目標數據,不管來源資料是檔案、分割區、磁碟還是光碟,都可以進行資料備份。

dd 指令的基本格式如下:

[root@localhost ~]# dd if="输入文件" of="输出文件" bs="数据块" count="数量"

參數:

  1. if:定義輸入資料的文件,也可以是輸入設備;
  2. of:定義輸出資料的文件,也可以是輸出設備;
  3. bs:指定資料區塊的大小,也就是定義一次讀取或寫入多少位元組。模式資料塊大小是 512 位元組;
  4. count:指定 bs 的數量;
  5. conv=標誌:依據標誌轉換檔案。標誌有以下這些:
    • ascii:由 EBCDIC 碼轉換至 ASCII 碼;
    • ebcdic:由 ASCII 碼轉換至 EBCDIC 碼;
    • ibm:由 ASCII 碼轉換至替換的 EBCDIC 碼;
    • block:將結束字元區塊裡的換行替換成等長的空格;
    • unblock:將 cbs 大小的區塊中尾部的空格替換為一個換行符;
    • lcase:將大寫字元轉換為小寫;
    • notrunc:不截斷輸出檔;
    • ucase:將小寫字元轉換為大寫;
    • swab:交換每一對輸入資料位元組;
    • noerror:讀取資料發生錯誤後仍然繼續;
    • sync:將每個輸入資料區塊以 NUL 字元填滿至 ibs 的大小;配合 block 或 unblock 時,會以空格取代 NUL 字元填入;

【範例 1】備份檔案

[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak
记录了67+1 的读入
#数据占了写满的67个数据块,以及1个没有写满的数据块
记录了67+1 的写出
#默认数据块大小是512字节
34439字节(34 kB)已复制,0.0524897 秒,656 kB/秒
#如果要备份文件,那么dd命令和cp命令非常类似
[root@localhost ~]# ll -h /tmp/httpd.bak
-rw-r--r--.1 root root 34K 6月 5 18:04 /tmp/httpd.bak
#查看一下生成的备份文件的大小

【範例 2】備份分割區為一個備份檔案

#
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda3 20G 2.0G 17G 11% /
tmpfs 306M 0 306M 0% /dev/shm
/dev/sda1 194M 27M 157M 15% /boot
/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom
#查看一下分区容量,我们备份/boot分区
[root@localhost ~]# dd if=/dev/sda1 of=/tmp/boot.bak
#备份完成
[root@localhost ~]# ll -h /tmp/boot.bak
-rw-r--r--.1 root root 200M 6月 5 18:14 /tmp/boot.bak
#查看生成的备份文件
#如果需要恢复,则执行以下命令
[root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1

如果想要把分割區直接備份成另一個分割區,就需要產生一個新的分割區,這個分割區的大小不能比來源分割區小,只能和來源分割區大小一致或比它大。命令如下:

[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1
#如果需要恢复,则只需把输入项和输出项反过来即可,命令如下
[root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1

【範例 3】整盤備份

[root@localhost ~]# dd if=/dev/sda of=/dev/sdb
#把磁盘a备份到磁盘b
[root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak
#把磁盘a备份成文件disk.bak
#备份恢复
#如果要备份到另一块硬盘上,那么,当源硬盘数据损坏时,只需用备份硬盘替换源硬盘即可
#如果要备份成文件,那么在恢复时需要把备份数据复制到其他Linux中,然后把新硬盘安装到这台Linux
#服务器上,再把磁盘备份数据复制到新硬盘中。命令如下
[root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb

【範例 4】複製軟碟

[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak
#在Linux中软盘的设备文件名是/dev/fd0
#这条命令先把软盘中的数据保存为临时数据文件
[root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0
#然后更换新的软盘,把数据备份复制到新软盘中,就实现了软盘的复制

如果需要備份的是光碟,那麼在 Linux 中就是使用 dd 指令製作光碟的 ISO 鏡像的。命令如下:

#制作光盘ISO镜像
[root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盘中所有的数据制作成ISO镜像
[root@localhost ~J # mkdir /mnt/cd
#建立一个新的挂载点
[root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #挂栽ISO文件到挂载点
[root@localhost ~]# cd /mnt/cd
#进入挂栽点
[root@localhost cd]# ls
CentOS_BuildTag images RELEASE-NOTES-en-tJS.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL
EULAisolinux repodata RPM-GPG-KEY-CentOS-Security-6
GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6
#数据是光盘当中的数据,这个ISO镜像是可以被当作真正的光盘使用的

我們有時需要製作指定大小的文件,例如,在增加 swap 分割區時,就需要建立指定大小的文件,這時也使用 dd 指令。命令如下:

[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10
#数据输入项是/dev/zero会向目标文件中不停地写入二进制的0
#指定数据块大小是1MB
#指定生成10个数据块。也就是定义输出的文件大小为10MB
记录了10+0 的读入
#显示数据占满了10个数据块
记录了10+0 的写出
#不过这里数据块的大小已经是1MB了
10485760字节(10 MB)已复制,0.00709902 秒,1.5 GB/秒
[root@localhost ~]# ll -h /tmp/testfile
-rw-r--r--.1 root root 10M 6月 5 18:46 /tmp/testfile
#生成的testfile文件的大小刚好是10MB

dd 指令在進行整盤複製時,類似於 GHOST 工具的功能,不過透過 dd 指令複製出來的硬碟資料要比 GHOST 複製出來的硬碟資料穩定得多。雖然 dd 指令功能強大,不過也有一個明顯的缺點,就是複製的時間較長,複製 100GB 的資料需要 15~25 分鐘(根據伺服器的效能不同而不同)。

實作資料備份還有非常多的方法和工具,像是 tar 和 cpio 指令。至於網路複製工具,如 rsync 和 scp 等,需要較完善的網路知識才能夠學習,這裡不再介紹。

以上是Linux dd指令解析: 資料備份及格式轉換的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除