磁盤管理和文件系統

磁盤結構

  • 設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
    一切皆文件: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
  • 磁盤設備的設備文件命名:/dev/DEV_FILE

    • IDE: /dev/hd
    • SCSI, SATA, SAS, USB: /dev/sd

      • 不同設備:a-z
        /dev/sda, /dev/sdb, …
        同一設備上的不同分區:1,2, …
        /dev/sda1, /dev/sda5
  • 機械硬盤存儲術語

    • head:磁頭
      track:磁道
      cylinder: 柱面
      secotr: 扇區,512bytes

    固態硬盤已無這些部件,但依舊使用相關術語

分區類型 :MBR 、GPT

  • MBR: Master Boot Record,1982年,使用32位表示扇區數,分區不超過2T

    • 如何分區:按柱面
    • 一個扇區512bytes

      • 446bytes: boot loader
        64bytes:分區表
        16bytes: 標識一個分區
        2bytes: 55AA
  • GPT:GUID(Globals Unique Identifiers) partition table 支持128個分區,使用64位,支持8Z(512Byte/block )、64Z ( 4096Byte/block)

    • 使用128位UUID(Universally Unique Identifier)表示磁盤和分區;GPT分區表自動備份在頭和尾兩份,并有CRC校驗位
    • UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動
  • 圖形化磁盤管理功能工具:點擊“應用程序”->“系統工具”->“磁盤” 或 執行命令gnome-disks

管理分區

  • 列出塊設備:

    • 從內存中讀取:lsblk 、 cat /proc/partation 、 ls /dev/sd*
      從硬盤上讀?。篺disk
  • 創建分區使用:

    • fdisk 創建MBR分區
      gdisk 創建GPT分區
      parted 高級分區操作(創建、復制、調整大小等等)

fdisk、gdisk (分區)

  • fdisk /dev/sdb
    gfisk /dev/sdb 一種類fdisk的GPT分區工具

  • 查看、創建分區:~]# fdisk -l [-u] [device…]

    • p 分區列表
      t 更改分區類型
      n 創建新分區
      d 刪除分區
      w 保存并退出
      q 不保存并退出
  • 同步分區表

    • 查看內核是否已經識別新的分區:
      ~]# cat /proc/partitions
      ~]# ls /dev/sd*
    • partprobe-重新設置內存中的內核分區表版本

centos6通知內核重新讀取硬盤分區表
新增分區用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
刪除分區用
partx -d –nr M-N /dev/DEVICE
CentOS 5、7: 使用partprobe
– partprobe [/dev/DEVICE]

parted

  • parted的操作都是實時生效的
    parted [選項]… [設備 [命令 [參數]…]…]

    • parted /dev/sdb mklabel gpt|msdos
      parted /dev/sdb print
      parted /dev/sdb mkpart primary 1 200 (默認M)
      parted /dev/sdb rm 1
      parted -l

文件系統

文件系統

  • 文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。

  • 從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。
    具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等

  • Linux支持的文件系統:cd /lib/modules/uname –r/kernel/fs

  • 鏈接文件:訪問同一個文件不同路徑

    • 硬鏈接:指向同一個inode的多個文件路徑;
      特性:

      1. 目錄不支持硬鏈接;
      2. 硬鏈接不能跨文件系統
      3. 創建硬鏈接會增加inode引用計數

      創建:ln [原文件] link_file

    • 符號鏈接:指向一個文件路徑的另一個文件路徑;
      特性:

      1. 符號鏈接與原文件是兩個各自獨立的文件,各有自己的inode;對原文件創建符號鏈接不會增加引用計數
      2. 支持對目錄創建符號鏈接,可以跨文件系統
      3. 刪除符號鏈接不影響原文件;但刪除原文件,符號指定的路徑即不存在,此時會變成無效鏈接;
        注:符號鏈接的大小是其指定的文件的路徑字符串的字節數;

      軟鏈接中的相對路徑是相對于軟鏈接的路徑,而非目錄的路徑:

      錯誤:
      [root@magedu apps]# ln -s ../etc/issue /apps/http22/issuelink2
      [root@magedu apps]# ll ./http22/issuelink2
      lrwxrwxrwx. 1 root root 12 Mar 29 18:47 ./http22/issuelink2 -> ../etc/issue

      正確:
      [root@magedu apps]# ln -s ../../etc/issue /apps/http22/issuelink3
      [root@magedu apps]# ll ./http22/issuelink3
      lrwxrwxrwx. 1 root root 15 Mar 29 18:48 ./http22/issuelink3 -> ../../etc/issue

      創建:ln -s [原文件] link_file

  • 文件系統類型

    • Linux文件系統:ext2(無日志功能), ext3,ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
    • 光盤:iso9660
    • 網絡文件系統:NFS, CIFS
    • 集群文件系統:GFS2, OCFS2(oracle)
    • 內核級分布式文件系統:ceph
    • Windows的文件系統:fat32(vfat), ntfs
    • Unix: FFS(fast), UFS(unix), JFS2
    • 交換文件系統:swap
    • 分布式文件系統: 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 (格式化)

    • mkfs.FSTYPE /dev/DEVICE:
      mkfs -t FS
      TYPE /dev/DEVICE

      • -t FSTYPE [DEVICE] { ext2 | ext3 | ext4…}

      mkfs -t FSTYPE = mkfs.FSTYPE
      mkfs -t ext4 = mkfs.FSTYPE

      • -L ‘LABEL’: 設定卷標
    • ext文件系統專用的管理工具:mke2fs

      • -t {ext2|ext3|ext4}:指定文件系統;
        -b {1024|2048|4096}:指定文件系統的塊大小;
        -L ‘LABEL’:指明卷標
        -j: 相當于 -t ext3
        mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext
        -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 
      設定:e2label DEVICE LABEL

    • findfs :查找分區
      findfs [options] LABEL=<label>
      findfs [options] UUID=<uuid>

    • tune2fs:重新設定ext系列文件系統可調整的參數的值
      -l:查看指定文件系統超級塊信息;super block

      • tune2fs -l DEVICE

      -L ‘LABEL’:修改卷標
      -m #:修預留給管理員的空間百分比
      -j: 將ext2升級為ext3
      -O: 文件系統屬性啟用或禁用, –O ^has_journal
      -o: 調整文件系統的默認掛載選項,–o ^acl | -o acl
      -U UUID: 修改UUID號
      注:塊大小無法修改

    • dumpe2fs:查看塊組的信息
      -h:只查看超級塊信息,不顯示分組信息

    • 文件系統檢測和修復:fsck、e2fsck

      • 文件系統檢測和修復:常發生于死機或者非正常關機時,可能會造成文件損壞;此時,應該檢測并修復文件系統;
        注意:一定不要在掛載狀態下修復
      • fsck:File System Check 
        -t:FSTYPE 指明文件系統類型;
        fsck -t FSTYPE = fsck.FSTYPE
        -a:無需交互自動修復所有錯誤
        -r:交互式修復錯誤
        FSTYPE一定要與分區上已有文件類型相同

      • e2fsck:ext系列文件專用的檢測修復工具
        -y:自動回答為yes
        -f:強制修復

掛載

  • 掛載:將除根以外的文件系統與根文件系統上某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為,此目錄即為掛載點;
  • 卸載:為解除此關聯關系的過程;umount
  • 掛載點:mount_point,用于作為另一個文件系統的訪問入口;

    1. 事先存在
    2. 應該使用未被或不會被其他進程使用到的目錄;
    3. 掛載點下原有的文件將會被隱藏;
    4. 掛載點目錄一般為空
  • mount
    mount DEVICE MOUNT_POINT
    mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備
    mount [-fnrsvw] [-t vfstype] [-o options] device dir

    • 查看當前系統所有已掛載的設備: mount、cat /etc/mtab 、cat /proc/mounts;
    • 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:掛載點

      1. 事先存在;建議使用空目錄
      2. 進程正在使用中的設備無法被卸載
    • 命令選項:

      • -t vsftype:(后需跟參數)指定要掛載的設備上的文件系統類型;多數情況下可省略,此時mount會通過blkid來判斷要掛載的設備的文件系統類型;
        -r: readonly,只讀掛載
        -w: read and write, 讀寫掛載
        -n: 默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab文件中;-n用于禁止此特性;
        -a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
        -L ‘LABEL’: 以LABEL指定要掛載設備
        -U ‘UUID’: 以UUID指定要掛載的設備
        -B, –bind: 綁定目錄到另一個目錄上
        查看內核追蹤到的已掛載的所有設備:
        cat /proc/mounts
      • -o options:(掛載文件系統的選項),多個選項使用逗號分隔

        • options:
          nasync:異步模式
          sync:同步模式,內存更改時,同時寫磁盤
          atime/noatime:(目錄或文件)在被訪問時是否更新其訪問時間戳
          diratime/nodiratime:(目錄)在被訪問時是否更新其訪問時間戳
          auto/noauto:是否支持自動掛載,是否支持-a選項
          exec/noexec:是否允許運行此設備上的程序文件
          dev/nodev:是否支持在此文件系統上使用設備文件
          suid/nosuid:是否允許程序上的suid和sgid特殊權限生效;no表示不允許
          remount:重新掛載
          ro:只讀
          rw:讀寫
          user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
          acl:啟用此文件系統上的facl功能,默認不支持;

          1. mount -o acl device dir
          2. tune2fs -o acl device

          defaults:相當于rw, nosuid, dev, exec, auto, nouser, async

    • 可以實現將目錄綁定至另一個目錄上,作為其臨時訪問入口;

      • mount –bind 源目錄 目標目錄
    • 掛載本地的回環設備(多掛載iso文件);

      • mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
    • 移動介質

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

      • 光盤設備文件:IDE:/dev/hdc 、 SATA:/dev/sr0

      • 符號鏈接文件:/dev/cdrom 、/dev/cdrw、 /dev/dvd 、 /dev/dvdrw

      • 在圖形環境下自動啟動掛載/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、或類似的設備文件

      • 在圖形環境中自動掛載

        1. 圖標在[計算機]窗口中創建
        2. 掛載在/run/media/<user>/<label>
      • 手動掛載
        mount /dev/sdb1 /mnt

  • umount
    umount device | dir
    注:正在被進程訪問到的掛載點無法被卸載

    • 查看掛載情況:
      findmnt MOUNT_POINT
    • 查看正在訪問指定文件系統的進程:
      lsof MOUNTPOINT
      fuser -v MOUNT
      POINT
    • 終止所有在正訪問指定的文件系統的進程:
      fuser -km MOUNT_POINT
    • 卸載:
      umount DEVICE
      umount MOUNT_POINT
  • /etc/fstab文件

    • 設定除根文件系統以外的其他文件系統能夠在開機時自動掛載:/etc/fstab文件
      使用mount -a 命令掛載/etc/fstab中的所有支持掛載的設備

    • /etc/fstab; 每行定義一個要掛載的文件系統;

      要掛載的設備或偽文件系統
      掛載點
      文件系統類型
      掛載選項
      轉儲頻率
      自檢次序

      要掛載的設備或偽文件系統:
      設備文件、LABEL(LABEL=””)、UUID(UUID=””)、偽文件系統名稱(proc,sysfs)
      掛載選項: defaults
      轉儲頻率: 
      0:不做備份
      1:每天轉儲
      2:每隔一天轉儲
      自檢次序: 
      0:不自檢
      1:首先自檢;一般只有rootfs才用1

  • 交換分區

    • Linux上的交換分區必須使用獨立的文件系統;且文件系統的system ID必須為82;

    • 交換分區是系統RAM的補充
      基本設置包括:

      創建交換分區或者文件
      使用mkswap寫入特殊簽名
      在/etc/fstab文件中添加適當的條目
      使用swapon -a 激活交換空間

    • 創建swap設備:mkswap命令

      • mkswap [OPTIONS] device
        -L LABLE :指明卷標
        -f : 強制
    • 啟用:swapon

      • swapon [OPTION]… [DEVICE]
        -a:激活定義在/etc/fstab文件中的所有的交換分區;
        -p PRIORITY:指定優先級
        /etc/fstab:pri=value
    • 禁用:swapoff [OPTION]… [DEVICE]

    • swap優先級:可以指定swap分區0到32767的優先級,值越大優先級越高;如果用戶沒有指定,那么核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一。

    • 先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數)。

    • 優化性能:分布存放,高性能磁盤存放

常見工具

  • 內存空間使用狀態:

    • free [OPTION]
      -m: 以MB為單位
      -g: 以GB為單位
  • 查看掛載后的磁盤使用狀態;文件系統空間占用等信息的查看工具:

    • df [OPTION]… [FILE]…

      • -l 只顯示本地文件系統的相關信息
        -H 以1000為單位
        -T 文件系統類型
        -h: human-readable
        -i:顯示inode的使用狀態而非 blocks
        -P: 以Posix兼容的格式輸出
  • 查看某目錄總體空間占用狀態:

    • du [OPTION]… DIR
      -h: human-readable
      -s: summary ;此目錄的總的使用狀態
  • dd

    • dd命令:在底層進行轉換和復制文件
    • 用法:

    dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
    bs=#:block size, 復制單元大小
    count=#:復制多少個bs

    of=file 寫到所命名的文件而不是到標準輸出
    if=file 從所命名文件讀取而不是從標準輸入
    bs=size 指定塊大?。仁鞘莍bs也是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
    block 轉換一行數據為長度為 cbs 的記錄,不足部分用空格填充。
    unblock 替代cbs長度的每一行尾的空格為新行
    lcase 把大寫字符轉換為小寫字符
    ucase 把小寫字符轉換為大寫字符
    nocreat 不創建輸出文件
    noerror 出錯時不停止
    notrunc 不截短輸出文件
    sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊

    • 磁盤拷貝
      dd if=/dev/sda of=/dev/sdb

    • 備份MBR:
      dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

    • 破壞MBR中的bootloader:
      dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

    • 備份:
      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
      dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
      dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
      dd if=/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錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生,且這個過程是安全高效的

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/73928

(0)
ss
上一篇 2017-04-22 22:01
下一篇 2017-04-23 13:34

相關推薦

  • 文件查看及查找命令

    cat  查看一個文件   -E: 顯示行結束符$   -n: 對顯示出的每一行進行編號   -A:顯示所有控制符   -b:非空行編號   -s:壓縮連續的空行成一行   -T:顯示制表符 常用:cat -An /et…

    Linux干貨 2017-04-08
  • 慶祝馬哥成為51cto學院Linux運維金牌講師第一人

    講師何其多,金牌只一人(2016免費課程在底部) 某天,小編聽到: linuxer1:聽說51CTO學院評出了一個Linux金牌講師!只有一人呢! linuxer2:用腿想,就知道肯定是馬哥嘍! linuxer3:前段時間馬哥又分享了2016最新課時,限時免費學習呢!10086個贊!我和我的好基友們都在學習! linuxer4:馬哥的51CTO課程學員都兩百…

    2016-04-14
  • bash-條件測試

                     條件測試 1.條件測試          ? 判斷某需求是否滿足,…

    Linux干貨 2016-08-12
  • 【招聘福利】三生石/鄭州/6-10K

    三生石科技 崗位職責: 1、熟悉Linux系統環境/內核參數/系統調用接口等,對系統、網絡和應用的原理等有較深刻的理解; 2、熟悉Linux操作系統的管理部署、配置和調優; 3、熟悉服務器架構部署、負載均衡、CDN等; 4、了解mysql數據庫的基本管理技能,有Apache/Tomcat/MySQL等服務的優化配置經驗; 5、了解常用系統自動化監控軟件的使用…

    Linux干貨 2015-11-10
  • LAMP

    練習:編譯安裝amp,提供兩個基于主機名的虛擬主機      (1) https, 部署pma      (2) 部署wordpress 編譯安裝: mariadb: # wget 10.1.0.1:/pub/Sources/7.x86_64/mariadb/…

    Linux干貨 2016-10-12
  • Linux 基礎命令

    一,GNU/LINUX操作系統組成        1.1硬件  計算機硬件資源,CPU,主板,內存,存儲器等 1.2 內核層 包含了硬件控制,設備驅動程序,虛擬文件系統,網絡管理,內存管理,進程管理,程序調度等 ,屬于內核空間 1.3 系統調用 所有的操作系統在其內核里都有一些內建的函數,這些函數可以用來完成…

    2016-10-29
欧美性久久久久