Linux磁盤管理

設備文件

一切皆文件
open(), read(), write(), close()

磁盤結構

磁盤接口類型

并行

  • IDE:133MB/s

  • SCSI:640MB/s

串口

  • SATA:6Gbps

  • SAS:6Gbps

  • USB:480MB/s

rpm

  • rotationsper minute 硬盤每分鐘轉數

硬盤結構

Linux磁盤管理 圖一 Linux磁盤管理 圖二


下面我們來介紹幾個磁盤存儲的數據

  1. head:磁頭 即 盤面

  2. track:磁道

  3. cylinder: 柱面

  4. secotr: 扇區,512bytes

每個扇區空間大小為512byte

從圖上看扇區是越往內圈越小。的確,扇區面積是小了,但存儲的數據量不變,只是數據存儲密度增大了而已(存在浪費空間)。

機械硬盤使用8位二進制數表示磁頭(head)數,所以最多可以有2^8個磁頭即256個

采用10位二進制數表示磁道(track)數,所以最多可以有2^10個磁道即1024個

采用6位二進制數表示扇區(sector)數,所以每個磁道最多可以有2^6個扇區即64個

這里我們可以得到一個公式

單個磁盤最大空間=每個磁道扇區數×每個扇區大小×磁道數×磁頭數=64×512(byte)×1024×256=8G

分區是按照柱面來劃分的

所以同樣的可以得到

一個分區的最小單位=一個磁道大小×磁頭數=64×512(byte)×256=8M

所以我們的分區大小通常為8M的整倍數

但實際情況好像并不是這樣?

這是因為我們的運算是按照CHS(cylinder、head、sector)的

即每個磁道的扇區數相同

現在一般采用CHS和LBA相結合的方式劃分扇區即每個磁道上的扇區數可以不同、并且一個柱面可以屬于多個分區

這樣單個磁盤最大空間要大的多的多

Linux磁盤管理

磁盤分區

為什么是分區?

  • 優化I/O性能

  • 實現磁盤空間配額限制

  • 提高修復速度

  • 隔離系統和程序

  • 安裝多個OS

  • 采用不同文件系統

分區

兩種分區方式:MBR,GPT

首先介紹MBR

MBR:master boot record 使用32位(4byte)表示扇區數,所以單個分區不超過2T(2^32×512=2T)

如何分區:按柱面

0磁道0扇區:512bytes

446bytes: boot loader
64bytes:分區表
        16bytes: 標識一個分區
        4個主分區;3主分區+1擴展(N個邏輯分區)
2bytes: MBR區域的有效性標識;55AA為有效

下面我們使用命令來看下MBR的內容

[root@redhat7 ~]# hexdump -C -n 512 /dev/sda

Linux磁盤管理

一個簡單實驗:

1、使用dd命令備份磁盤的mbr

2、使用dd命令破壞磁盤的mbr

3、使用dd命令利用備份的mbr恢復到磁盤上

[root@redhat7 ~]# fdisk -l /dev/sdb
// 首先查看/dev/sdb  是存在的
[root@redhat7 ~]# dd if=/dev/sdb of=/root/mbr.bak bs=512 count=1
// 備份/dev/sdb的MBR 到 /root/mbr.bak
[root@redhat7 ~]# dd if=/dev/zero of=/dev/sdb bs=512 count=1
// 破壞/dev/sdb的MBR
[root@redhat7 ~]# fdisk -l /dev/sdb
// /dev/sdb的分區表 已經不復存在了
[root@redhat7 ~]# dd if=/root/mbr.bak of=/dev/sdb bs=512 count=1
// 恢復/dev/sdb 的MBR
[root@redhat7 ~]# fdisk -l /dev/sdb
// /dev/sdb的分區表又重新顯示了

MBR分區結構

Linux磁盤管理

從圖上我們也可以發現一個問題:

實驗環境    
/dev/sda為我們正常使用的硬盤
/dev/sdb為我們新添加的一塊硬盤

dd if=/dev/sda of=/dev/sdb bs=512 count=1
dd if=/dev/sda of=/dev/sdb bs=1 count=66 skip=446 seek=446
dd if=/dev/zero of=/dev/sdb bs=1 count=2 skip=510 seek=510
dd if=/dev/sda of=/dev/sdb bs=1 count=2 skip=510 seek=510

Linux磁盤管理

從圖中我們可以看到復制sda的MBR到sdb,但是它們兩個顯示的并不一樣,sdb沒有顯示邏輯分區sdb5

所以可以說明MBR存儲的只有主分區和擴展分區的分區表信息(最多只能復制4個分區表的信息,這點前面也介紹過);
邏輯分區的分區表信息并不存在于MBR(可以查看前面的圖示,這點需要注意)

GPT分區

  • GPT:GUID patition table 支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

  • 使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位

  • UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動

    操作系統安裝在GPT分區中時,要在主板BIOS設置中將電腦設置為支持UEFI啟動

GPT分區結構

Linux磁盤管理

管理分區

  • 列出塊設備

    [root@redhat7 ~]# blkid 
        blkid -L <label> | -U <uuid>
  • 添加一塊新的硬盤作為實驗環境

    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host0/scan
    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
    [root@redhat7 ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
    //在不需要重啟的情況下識別新添加的硬盤
  • 創建MBR分區

    fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
    
    [root@redhat7 ~]# fdisk -hlep
    Usage:
        fdisk [options] <disk>change partition table
        fdisk [options] -l <disk> list partition table(s)
  • 創建MBR分區

    gdisk [ -l ] device

GNU parted高級分區操作(創建、復制、調整大小等等)

    [root@redhat7 ~]# parted --help
    Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
    Apply COMMANDs with PARAMETERS to DEVICE.  If no COMMAND(s) are given, run in
    interactive mode.

查看是MBR分區還是GPT分區的幾個命令,及其混合

[root@redhat7 ~]# gdisk /dev/sdb
[root@redhat7 ~]# gdisk /dev/sdc
[root@redhat7 ~]# fdisk /dev/sdb
[root@redhat7 ~]# fdisk /dev/sdc
[root@redhat7 ~]# fdisk -l /dev/sdc
Disk label type: gpt
[root@redhat7 ~]# fdisk -l /dev/sdb
Disk label type: dos


[root@redhat7 ~]# gdisk -l /dev/sdc
[root@redhat7 ~]# gdisk -l /dev/sdb
// 注意區別

同步分區表

查看內核是否已經識別新的分區
[root@redhat7 ~]# cat /proc/partitions
[root@redhat7 ~]# lsblk
[root@redhat7 ~]# ls /dev/設備名
//以上3個命令為查看內核中的分區表

[root@redhat7 ~]# fdisk -l /dev/設備
//查看為磁盤上的分區表

如果上面和下面命令顯示的設備文件不一樣,則需要通知內核重新讀取硬盤分區表

centos 6

新增分區用
[root@redhat7 ~]# partx -a -n M:N /dev/DEVICE

刪除分區用
[root@redhat7 ~]# partx -d -nr M:N /dev/DEVICE

centos 5、7

[root@redhat7 ~]# partprobe [/dev/DEVICE]

parted命令

parted的操作都是實時生效的,小心使用

parted - a partition manipulation program
parted [options] [device [command [options...]...]]


optionss:

-l, --list   lists partition layout on all block devices


COMMANDS:

help [COMMAND]   print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE   create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END   make a partition
print [...]  display the partition table,
rm NUMBER    delete partition NUMBER



# 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文件系統: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

  • 光盤:iso9660

  • Windows:fat32, ntfs

  • Unix: FFS(fast), UFS(unix), JFS2

  • 網絡文件系統:NFS, CIFS

  • 集群文件系統:GFS2, OCFS2(oracle)

  • 分布式文件系統: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

VFS:Linux虛擬文件系統

Linux磁盤管理

創建文件系統

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=

tune2fs

tune2fs:重新設定ext系列文件系統可調整參數的值

-l:查看指定文件系統超級塊信息;super block
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號

dumpe2fs:
-h:查看超級塊信息(分組信息),分區用分組管理

超級塊和inode table

Linux磁盤管理

文件系統檢測和修復

常發生于死機或者非正常關機之后

掛載為文件系統標記為“dirty”

fsck: File System Check
fsck.FS_TYPE
fsck-t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤

注意: FS_TYPE一定要與分區上已經文件類型相同;

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

掛載mount

掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為

卸載:為解除此關聯關系的過程

把設備關聯掛載點:mount Point # mount

卸載時:可使用設備,也可以使用掛載點 # umount

掛載點下原有文件在掛載完成后會被臨時隱藏

掛載點目錄一般為空

掛載方法: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:掛載點
事先存在;建議使用空目錄
進程正在使用中的設備無法被卸載


[option]
    -t vsftype:指定要掛載的設備上的文件系統類型
    -r: readonly,只讀掛載
    -w: read and write, 讀寫掛載
    -n: 不更新/etc/mtab,相當于#mount
    -a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
    -L 'LABEL': 以卷標指定掛載設備
    -U 'UUID': 以UUID指定要掛載的設備
    -B, --bind: 綁定目錄到另一個目錄上

查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts



-o options:(掛載文件系統的選項),多個選項使用逗號分隔
    async:異步模式
    sync:同步模式,內存更改時,同時寫磁盤
    atime/noatime:包含目錄和文件
    diratime/nodiratime:目錄的訪問時間戳
    auto/noauto:是否支持自動掛載,是否支持-a選項
    exec/noexec:是否支持將文件系統上運行應用程序
    dev/nodev:是否支持在此文件系統上使用設備文件
    suid/nosuid:不否支持suid和sgid權限
    remount:重新掛載
    ro:只讀
    rw:讀寫
    user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
    acl:啟用此文件系統上的acl功能
    Defaults:相當于rw, suid, dev, exec, auto, nouser, async

卸載命令

查看掛載情況:
#findmntMOUNT_POINT
查看正在訪問指定文件系統的進程:
#lsofMOUNT_POINT
#fuser -v MOUNT_POINT
終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
卸載:
# umountDEVICE
# umountMOUNT_POINT

掛載點和/etc/fstab

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

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

(0)
sixijiesixijie
上一篇 2016-08-30
下一篇 2016-08-30

相關推薦

  • N26-第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意;同一個用戶登錄多次,則只顯示一次即可。[root@localhost ~]# whoroot     tty1         2017-03-03 19:28root     pts/0     &nbsp…

    Linux干貨 2017-03-04
  • CentOS 7上的性能監控工具

    Linux中基于命令行的性能監控工具:dstat、top、netstat、vmstat、htop、ss、glances 1、dstat – 多類型資源統計工具(需配置epel源)   該命令整合了vmstat,iostat和ifstat三種命令。同時增加了新的特性和功能可以讓你能及時看到各種的資源使用情況,從而能夠使你對比和整…

    Linux干貨 2016-09-07
  • 7-26第三課-幫助和bash基礎命令

     命令:     1.獲取幫助 內部命令     #help COMMAND     #man COMMAND 外部命令     # COMMAND …

    Linux干貨 2016-07-29
  • Python裝飾器與面向切面編程

    新年好~ 那么,很久沒有更新了,其實想想也沒多少可以寫的,因為Python的文檔似乎很全面的說……能做的差不多只有翻譯和整理了,英文過關的朋友不妨直接去doc.python.org這里查看相關資料 :) 轉載請注明原作者和原文地址,多謝! 今天來討論一下裝飾器。裝飾器是一個很著名的設計模式,經常被用于有切面需求的場景,較為經典的有插入日志、性能測試、事務處理…

    Linux干貨 2015-03-12
  • PXE網絡引導系統自動化安裝CentOS7

     一.PXE 注意:安裝前 selinux 禁用,iptables 關閉 dhcp 服務器靜態IP地址  1.PXE的工作原理:      Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC  &nbsp…

    Linux干貨 2017-07-24

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-01 13:23

    圖片看起來是很直觀,建議加上文字描述,這樣別人才看的東,總體來說總結的還不錯,有自己獨特的地方。

欧美性久久久久