1. 程式人生 > >磁盤存儲和文件系統:

磁盤存儲和文件系統:

磁盤文件系統

設備文件
I/O Ports: I/O設備地址
一切皆文件:open(), read(), write(), close()
設備類型:
塊設備:block,存取單位“塊”,磁盤 分區 塊
字符設備:char,存取單位“字符”,鍵盤
設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
設備號碼:
主設備號:major number, 標識設備類型
次設備號:minor number, 標識同一類型下的不同設備

硬盤接口類型
    並行:
        IDE:133MB/s
        SCSI:640MB/s
    串口:
        SATA:6Gbps
        SAS:6Gbps
        USB:480MB/s
        rpm: rotations
            per minute  每分鐘的轉速

機械硬盤和固態硬盤
    機械硬盤(HDD):Hard Disk Drive,即是傳統普通硬盤,主要由:盤片,磁頭,盤片轉軸及控制電機,磁頭控制器,數據轉換器,接口,緩存等幾個部分組成。機械硬盤中所有的盤片都裝在一個旋轉軸上,每張盤片之間是平行的,在每個盤片的存儲面上有一個磁頭,磁頭與盤片之間的距離比頭發絲的直徑還小,所有的磁頭聯在一個磁頭控制器上,由磁頭控制器負責各個磁頭的運動。磁頭可沿盤片的半徑方向運動,加上盤片每分鐘幾千轉的高速旋轉,磁頭就可以定位在盤片的指定位置上進行數據的讀寫操作。數據通過磁頭由電磁流來改變極性方式被電磁流寫到磁盤上,也可以通過相反方式讀取。硬盤為精密設備,進入硬盤的空氣必須過濾
    固態硬盤(SSD):Solid State Drive,用固態電子存儲芯片陣列而制成的硬盤,由控制單元和存儲單元(FLASH芯片、DRA)組成。固態硬盤在接口的規範和定義、功能及使用方法上與普通硬盤的完全相同,在產品外形和尺寸上也與普通硬盤一致
    相較於HDD,SSD在防震抗摔、傳輸速率、功耗、重量、噪音上有明顯優勢,SSD傳輸速率性能是HDD的2倍相較於SSD,HDD在價格、容量、使用壽命上占有絕對優勢
    硬盤有價,數據無價,目前SSD不能完全取代HHD
設備文件:
    磁盤設備的設備文件命名:/dev/DEV_FILE
    SCSI, SATA, SAS,IDE,USB: /dev/sd
    虛擬磁盤:/dev/vd
    不同磁盤標識:a-z,aa,ab…
        /dev/sda, /dev/sdb, ...
    同一設備上的不同分區:1,2, ...
        /dev/sda1, /dev/sda5
    硬盤存儲術語
        head:磁頭
        track:磁道
        cylinder: 柱面
        sector: 扇區,512bytes

CHS和LBA
    CHS (是比較老的技術最大空間8G)
        采用24bit位尋址
        其中前10位表示cylinder,中間8位表示head,後面6位表示sector
        最大尋址空間8GB

    LBA(logical block addressing)
        LBA是一個整數,通過轉換成CHS格式完成磁盤具體尋址
        LBA采用48個bit位尋址
        最大尋址空間128PB
    由於CHS尋址方式的尋址空間在大概8GB以內,所以在磁盤容量小於大概8GB時,可以使用CHS尋址方式或是LBA尋址方式;在磁盤容量大於大概8GB時,則只能使用LBA尋址方式

使用分區空間
    設備識別
    設備分區
    創建文件系統
    標記文件系統
    在/etc/fstab文件中創建條目
    掛載新的文件系統

如何使用磁盤:
    1、分區
    2、創建文件系統 簡稱:格式化
    3、掛載:分配目錄名

磁盤分區
    為什麽分區
        優化I/O性能
        實現磁盤空間配額限制
        提高修復速度
        隔離系統和程序
        安裝多個OS
        采用不同文件系統

分區
    兩種分區方式:MBR,GPT      (以現在的使用情況 MBR為主流)
    MBR: Master Boot Record,1982年,使用32位表示扇區數,分區不超過2T
    如何分區:按柱面
    0磁道0扇區:512bytes
        446bytes: boot loader
        64bytes:分區表
        16bytes: 標識一個分區
        2bytes: 55AA 標誌位
    4個主分區;3主分區+1擴展(N個邏輯分區)

管理分區
    列出塊設備
        lsblk
    創建分區使用:
        fdisk創建MBR分區
        gdisk創建GPT分區
        parted高級分區操作
    partprobe-重新設置內存中的內核分區表版本

parted命令  用於創建分區表
    parted的操作都是實時生效的,小心使用
    用法:parted [選項]... [設備[命令[參數]...]...]
        parted /dev/sdb mklabel gpt|msdos
            用於創建分區
        parted /dev/sdbprint
        parted /dev/sdb mkpart primary 1 200 (默認M)
            mkpart:創建一個分區
            primary:表示主分區
            1 200:從1M開始,200M結束
        parted /dev/sdbrm1
        parted –l 列出分區信息

例如:用/dev/sdb創建一個分區為MBR的分區
    parted /dev/sdb mklabel msdos   msdos就是MBR的一個名稱    

分區工具fdisk和gdisk
    gdisk /dev/sdb 類fdisk 的GPT分區工具
    fdisk -l [-u] [device...] 查看分區
    fdisk /dev/sdb 管理分區
    fdisk:適用於MBR類型的分區,也能用於gpt分區但是,不建議使用 不穩定
    子命令:
        p 分區列表
        t 更改分區類型
        n 創建新分區
        d 刪除分區
        v 校驗分區
        u 轉換單位
        w 保存並退出
        q 不保存並退出
註意:創建完分區之後 partprobe用於進行同步可適用於centos7,centos6無法進行同步
在chentos7上在老的硬盤中創建一個新的分區,保存時會報一個錯誤:
    WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    只需要用partprobe同步一個即可   只適用於centos7 

在centos6 上創建分區時在一上去就是提示你:
    DOS-compatible mode is deprecated. It‘s strongly recommended to
    switch off the mode (command ‘c‘) and change display units to
    sectors (command ‘u‘)   (DOS-compatible的模式兼容已經過時了,強烈推薦關閉模式)
fdisk -c /dev/sda   加上c之後就可以了
    在centos6上添加一個新的分區保存時也回報一個錯誤
    註意:在添加分區時需執行:
    partx -a /dev/sda  執行完之後會報一個虛假錯誤 不用擔心
    在centos6上刪除分區時須執行同步:
    partx -d --nr 6-8 /dev/sda  6-8:是所刪除的分區是第6、7、8的分區 只適用於centos6上刪除分區時使用進行同步

同步分區表
    查看內核是否已經識別新的分區:
        cat /proc/partations
    centos6通知內核重新讀取硬盤分區表
        新增分區用
        partx-a /dev/DEVICE
        kpartx-a /dev/DEVICE -f: force
        刪除分區用
        partx-d --nrM-N /dev/DEVICE
    CentOS 5,7: 使用partprobe
        partprobe[/dev/DEVICE]

文件系統
文件系統是操作系統用於明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日誌,壓縮,加密等
支持的文件系統:/lib/modules/`uname –r`/kernel/fs

文件系統類型
    inux文件系統:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
    光盤:iso9660
    Windows:FAT32, exFAT,NTFS
    Unix: FFS(fast), UFS(unix), JFS2
    網絡文件系統:NFS, CIFS
    集群文件系統:GFS2, OCFS2(oracle)
    分布式文件系統:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
    RAW:未經處理或者未經格式化產生的文件系統

文件系統分類
    根據其是否支持"journal(日誌)"功能:
        日誌型文件系統: ext3, ext4, xfs, ...
        非日誌型文件系統: ext2, vfat
    文件系統的組成部分:
        內核中的模塊:ext4, xfs, vfat
        用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
    Linux的虛擬文件系統:VFS
    查前支持的文件系統:cat /proc/filesystems

創建文件系統
    mkfs命令:
        (1) mkfs.FS_TYPE/dev/DEVICE
            ext4
            xfs
            btrfs
            vfat
        (2) mkfs-t FS_TYPE /dev/DEVICE
        -L ‘LABEL‘: 設定卷標

創建ext文件系統
    mke2fs:ext系列文件系統專用管理工具
        -t {ext2|ext3|ext4}
        -b {1024|2048|4096}
        -L ‘LABEL‘
        -j: 相當於-t ext3
    mkfs.ext3 = mkfs-t ext3 = mke2fs -j = mke2fs -t ext3
        -i#: 為數據空間中每多少個字節創建一個inode;此大小不應該小於block的大小
        -N #:指定分區中創建多少個inode
        -I 一個inode記錄占用的磁盤空間大小,128---4096
        -m #: 默認5%,為管理人員預留空間占總空間的百分比
        -O FEATURE[,...]:啟用指定特性
        -O ^FEATURE:關閉指定特性

文件系統標簽
    指向設備的另一種方法
    與設備無關
    blkid:塊設備屬性信息查看
        blkid[OPTION]... [DEVICE]
        -U UUID: 根據指定的UUID來查找對應的設備
        -L LABEL:根據指定的LABEL來查找對應的設備
    e2label:管理ext系列文件系統的LABEL
        e2label DEVICE [LABEL]
    findfs:查找分區
        findfs[options] LABEL=<label>
        findfs[options] UUID=<uuid>

問題:在/etc/fstab文件中對應/data文件夾是哪個設備掛載上去的???
blkid -U grep /data /etc/fstab|sed -r "s/UUID=([^ ]*) .*/\1/"
或者
blkid -U 5d151697-f0b0-4139-9341-adc6950628a4 可直接復制/etc/fstab中掛載/data中的UUID
或:
blkid -U grep /data /etc/fstab|cut -d" " -f1|cut -d= -f2
或:
findfs grep /data /etc/fstab|cut -d" " -f1

tune2fs (只能看ext系列的文件,無法看xfs的文件 會報錯誤)
    tune2fs:重新設定ext系列文件系統可調整參數的值
        -l:查看指定文件系統超級塊信息;super block
        -L ‘LABEL‘:修改卷標
        -m #:修預留給管理員的空間百分比
        -j: 將ext2升級為ext3
        -O: 文件系統屬性啟用或禁用,–O ^has_journal
        -o: 調整文件系統的默認掛載選項,–o ^acl
        -U UUID: 修改UUID號
    dumpe2fs:
        塊分組管理,32768塊
        -h:查看超級塊信息,不顯示分組信息

問題:如何將/dev/sdb2的UUID換個新的???
tune2fs -U uuidgen /dev/sdb2
uuidgen:可生成隨機的UUID

文件系統檢測和修復
    常發生於死機或者非正常關機之後
    掛載為文件系統標記為“no clean”
    註意:一定不要在掛載狀態下修復
        fsck: File System Check
        fsck.FS_TYPE
        fsck-t FS_TYPE
        -p: 自動修復錯誤
        -r: 交互式修復錯誤
        FS_TYPE一定要與分區上已經文件類型相同
    e2fsck:ext系列文件專用的檢測修復工具
        -y:自動回答為yes
        -f:強制修復

註意:fsck、e2fsck兩個只適合ext系列的文件 fsck命名會自動檢測文件系統的類型

問題:將/dev/sdb1中的設備文件給破壞了如何修復呢???
dd if=/dev/zero of=/dev/sdb1 bs=1M count=30 註意/dev/sdb1有1G的大小只是破壞了30M而已 直接將它超級塊給破壞;
Couldn‘t find valid filesystem superblock.
[root@localhostcentos6 ~]# fsck /dev/sdb1 -y
或者
e2fsck -f /dev/sdb1 -y -f在磁盤上會一個一個的去檢查
tune2fs -l /dev/sdb1 |less 用於查看磁盤的狀態

掛載mount
    掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為
    卸載:為解除此關聯關系的過程
    把設備關聯掛載點:mount Point
    mount
    卸載時:可使用設備,也可以使用掛載點
    umount
    掛載點下原有文件在掛載完成後會被臨時隱藏
    掛載點目錄一般為空

用mount命令掛載文件系統
    掛載方法:mount DEVICE MOUNT_POINT
    mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備
    mount [-fnrsvw] [-t vfstype] [-o options] device dir
    device:指明要掛載的設備;
        (1) 設備文件:例如/dev/sda5
        (2) 卷標:-L ‘LABEL‘, 例如-L ‘MYDATA‘
        (3) UUID, -U ‘UUID‘:例如-U ‘0c50523c-43f1-45e7-85c0-a126711d406e‘
        (4) 偽文件系統名稱:proc, sysfs, devtmpfs, configfs
        dir:掛載點
            事先存在;建議使用空目錄
            進程正在使用中的設備無法被卸載

mount常用命令選項
    -t vsftype:指定要掛載的設備上的文件系統類型
    -r: readonly,只讀掛載  
    -w: read and write, 讀寫掛載
    -n: 不更新/etc/mtab,mount不可見
        centos6:mount -n /dev/sdb1 /data/sdb1/     可隱藏掛載
        centos7:無法使用

    -a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
    -L ‘LABEL‘: 以卷標指定掛載設備
    -U ‘UUID‘: 以UUID指定要掛載的設備
    -B, --bind: 綁定目錄到另一個目錄上  (用於實現目錄掛目錄)
        mount /dev/sdb1 /data/sdb1/  
        mount /data/sdb1 /mnt/sdb1
        將磁盤掛載到/data/sdb1後,再將/data/sdb1/掛載到/mnt/sdb1中  
        裏面中的文件可以共享 其實是一個軟連接

    查看內核追蹤到的已掛載的所有設備
        cat /proc/mounts(可用於查看所有掛載設備)

    -o options:(掛載文件系統的選項),多個選項使用逗號分隔
        async:異步模式
        sync:同步模式,內存更改時,同時寫磁盤
        atime/noatime:包含目錄和文件
        diratime/nodiratime:目錄的訪問時間戳
        auto/noauto:是否支持自動掛載,是否支持-a選項
        exec/noexec:是否支持將文件系統上運行應用程序
    問題如何將/data/sdb1/設置為noexec???
            mount -o remount,noexec /data/sdb1/     讓/data/sdb1/文件不能直接運行以防有病毒程序
            mount -o exec,remount /data/sdb1/   解除noexec

        dev/nodev:是否支持在此文件系統上使用設備文件
            mount -o remount,nodev /data/sdb1   讓此分區上的設備文件失效
            mount -o dev,remount /data/sdb1/

        suid/nosuid:是否支持suid和sgid權限
        remount:重新掛載
        ro:只讀
        rw:讀寫
        user/nouser:是否允許普通用戶掛載此設備,/etc/fstab使用
        acl:啟用此文件系統上的acl功能
添加acl權限:
tune2fs -o acl /dev/sdb1    (添加完加之後 需要取消掛載重新掛載設備)

問題:當遇到用戶在訪問設備時,如何取消/dev/sdb1設備上的acl權限???
mount -o noacl,remount /dev/sdb1 /data/sdb1/

        loop: 使用loop設備
    defaults:相當於rw, suid, dev, exec, auto, nouser, async

卸載命令
    查看掛載情況
        findmntMOUNT_POINT|device
        findmnt /data/sdb1/ 可用於判斷是否掛載設備

    查看正在訪問指定文件系統的進程
        lsofMOUNT_POINT
        fuser -v MOUNT_POINT

    終止所有在正訪問指定的文件系統的進程
        fuser -km MOUNT_POINT

問題:有用戶正在訪問/data/sdb1時,管理員想取消掛載設備時怎麽做???
fuser -v /data/sdb1/ 查看正在訪問此文件的用戶
fuser -km /data/sdb1/ 強行踢出正在訪問的用戶

    卸載
        umountDEVICE
        umountMOUNT_POINT

掛載點和/etc/fstab
    配置文件系統體系
    被mount、fsck和其它程序使用
    系統重啟時保留文件系統體系
    可以在設備欄使用文件系統卷標
    使用mount -a 命令掛載/etc/fstab中的所有文件系統

mount /dev/sdb1 /data/sdb1  這個方式掛載機器如果重啟了保存不住的,如何想要保存住的話就要寫入/etc/fstab配置文件中即可:
vim /etc/fstab
UUID=1bcfeffa-ae95-4e04-ab34-a37b428a9071 /data/sdb2    ext4  defaults  0 3     
寫完之後不用重啟可執行mount -a 即可
tune2

註意:如果要加別的權限時用戶正在訪問時改完之後可執行mount -o remount /data/sdb2/

問題:把/dev/sdb中硬盤格式化,將/home/的家目錄全部遷移進去
註意:在操作之前先做備份!!!!!!!!!!!!!
安全起見可用fdisk將裏面的分區全部清除即可也可以運行命令:
dd if=/dev/zero of=/dev/sdb bs=1 count=512 在實際運行中很危險不建議使用
partx -d --nr 1-2 /dev/sdb 同步 如不同的話內存中還有
mkfs.ext4 /dev/sdb1 -L /home
mkdir /mnt/home
mount /dev/sdb1 /mnt/home
cp -av /home/* /mnt/home

    vim /etc/fstab
        UUID=e62955d4-7fa9-4765-97a9-b47b81426e2e /home         ext4    defaults 0 0
    rm -rf /home/*  將本機原本的家目錄空間清除
    mount -a    加載讀取新的home家文件
    umount /mnt/home
    rm -rf /mnt/home
    su - user   切換用戶看是否成功
    reboot  看是否正常開機

文件掛載配置文件
    /etc/fstab每行定義一個要掛載的文件系統
    要掛載的設備或偽文件系統
        設備文件
        LABEL:LABEL=""
        UUID:UUID=""
        偽文件系統名稱:proc, sysfs
    掛載點
    文件系統類型
    掛載選項:defaults
    轉儲頻率:0:不做備份1:每天轉儲2:每隔一天轉儲
    自檢次序:0:不自檢
        1:首先自檢;一般只有rootfs才用1

處理交換文件和分區
    交換分區是系統RAM的補充
    基本設置包括:
        創建交換分區或者文件
        使用mkswap寫入特殊簽名
        在/etc/fstab文件中添加適當的條目
        使用swapon -a 激活交換空間

掛載交換分區
    啟用:swapon
        swapon[OPTION]... [DEVICE]
        -a:激活所有的交換分區
        -p PRIORITY:指定優先級
        /etc/fstab:pri=value
    禁用:swapoff[OPTION]... [DEVICE

SWAP的優先級    用於查看用執行 swapon -s    
可以指定swap分區0到32767的優先級,值越大優先級越高
如果用戶沒有指定,那麽核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一
先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高於核心缺省指定的優先級(是負數)
優化性能:分布存放,高性能磁盤存放

SWAP用於模擬內存使用的,一般內存不夠時會使用SWAP

問題:如遇到SWAP只有2G想要在創建2G該怎麽做呢?????
fdisk /dev/sdd 分一個2G的分區用於SWAP
/dev/sdd1 1 262 2104483+ 82 Linux swap / Solaris
mkswap /dev/sdd1 格式成SWAp分區
vim /etc/fstab 寫入到文件中用於下次開機自動掛載
UUID=6c8ebad5-0af8-498e-9bfa-698ba26bf6a9 swap swap defaults 0 0
swapon -a 配置文件生效

可以查看SWAP的優先級:
swapon -s
Filename Type Size Used Priority
/dev/sda5 partition 2097148 0 -1
/dev/sdd1 partition 2104476 0 -2
那麽如何將sdd1的優先級高於sda5????
vim /etc/fstab
UUID=6c8ebad5-0af8-498e-9bfa-698ba26bf6a9 swap swap defaults,pri=10 0 0
pri=100:優先級10,數字自己定義 只要高於sda5 -1 即可
swapoff /dev/sdd1 需要先禁用
swapon -a 配置文件生效
swapon -s 查看優先級是否改變

 移動介質
    掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分
    訪問前、介質必須被掛載
    摘除時,介質必須被卸載
    按照默認設置,非根用戶只能掛載某些設備(光盤、DVD、軟盤、USB等等)
    掛載點通常在/media 或/mnt下

使用光盤
    在圖形環境下自動啟動掛載/run/media/<user>/<label>
    否則就必須被手工掛載
        mount /dev/cdrom/mnt/
    eject命令卸載或彈出磁盤
    創建ISO文件
        cp/dev/cdrom/root/centos7.iso
        mkisofs -r -o /root/etc.iso /etc
    刻錄光盤
        wodim–v –eject centos.iso

掛載USB介質
    查看USB設備是否識別
        lsusb
    被內核探測為SCSI設備
        /dev/sdaX、/dev/sdbX、或類似的設備文件
    在圖形環境中自動掛載
        圖標在[計算機]窗口中創建
        掛載在/run/media/<user>/<label>
    手動掛載
        mount /dev/sdb1 /mnt

常見工具
    文件系統空間占用等信息的查看工具:
        df[OPTION]... [FILE]...
        -H 以1000為單位
        -T 文件系統類型
        -h: human-readable
        -i:inodesinstead of blocks
        -P: 以Posix兼容的格式輸出
    查看某目錄總體空間占用狀態:
        du [OPTION]... DIR
        -h: human-readable
        -s: summary --max-depth

工具dd
    dd命令:轉換和復制文件 convert and copy a file
    用法:
            dd  if=/PATH/FROM/SRC of=/PATH/TO/DEST
            bs=#:block size, 復制單元大小
            count=#:復制多少個bs
        of=file     寫到所命名的文件而不是到標準輸出
        if=file     從所命名文件讀取而不是從標準輸入
        bs=size     指定塊大小(既是是ibs也是obs)
        ibs=size        一次讀size個byte
        obs=size        一次寫size個byte
        cbs=size        一次轉化size個byte
        skip=blocks     從開頭忽略blocks個ibs大小的塊
        seek=blocks     從開頭忽略blocks個obs大小的塊
        count=n         只拷貝n個記錄
        conv=conversion[,conversion...] 用指定的參數轉換文件
        轉換參數:
        ascii 轉換EBCDIC 為ASCII
        ebcdic 轉換ASCII 為EBCDIC
        lcase 把大寫字符轉換為小寫字符
        ucase 把小寫字符轉換為大寫字符
        nocreat 不創建輸出文件
        noerror 出錯時不停止
        notrunc 不截短輸出文件
        sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
    備份MBR:
        ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
    破壞MBR中的bootloader:
        ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446
    有一個大與2K的二進制文件fileA。現在想從第64個字節位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,實現如下:
        ddif=fileAof=fileBbs=1 count=128 skip=63 seek=31 conv=notrunc

    備份:
        dd if=/dev/sdx of=/dev/sdy
        將本地的/dev/sdx整盤備份到/dev/sdy
        dd if=/dev/sdx of=/path/to/image
        將/dev/sdx全盤數據備份到指定路徑的image文件
        dd if=/dev/sdx | gzip >/path/to/image.gz
        備份/dev/sdx全盤數據,並利用gzip壓縮,保存到指定路徑
    恢復:
        dd if=/path/to/image of=/dev/sdx
        將備份文件恢復到指定盤
        gzip -dc /path/to/image.gz | dd of=/dev/sdx
        將壓縮的備份文件恢復到指定盤

    拷貝內存資料到硬盤
        dd if=/dev/mem of=/root/mem.bin bs=1024
        將內存裏的數據拷貝到root目錄下的mem.bin文件
    從光盤拷貝iso鏡像
        dd if=/dev/cdrom of=/root/cd.iso
        拷貝光盤數據到root文件夾下,並保存為cd.iso文件
    銷毀磁盤數據
        dd if=/dev/urandom of=/dev/sda1
        利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據,執行此操作以後,/dev/sda1將無法掛載,創建和拷貝操作無法執行

    得到最恰當的block size
        ddif=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
        ddif=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
        ddif=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
        通過比較dd指令輸出中命令的執行時間,即可確定系統最佳的block size大小

    測試硬盤寫速度
        dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
    測試硬盤讀速度
        dd if=/root/1Gb.file bs=64k | dd of=/dev/null

    修復硬盤
        dd if=/dev/sda of=/dev/sda
            當硬盤較長時間(比如1,2年)放置不使用後,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,並可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生,且這個過程是安全高效的

磁盤存儲和文件系統: