1. 程式人生 > >Linux下:磁盤管理和文件系統管理

Linux下:磁盤管理和文件系統管理

pro 協調 開始 路徑 原理 位置 rtai 關機 solaris

一、 磁盤基礎知識
本章學習之前需要了解以下幾點:
  ?強調: Linux裏面一切皆文件。
  ?I/O Ports即I/O設備地址,用來標識硬件對應的設備地址,來讓操作系統以及cpu使用。
  ?註意: CPU的核數不一定就是越多越好,由於CPU協調之間的問題,性能可能不升反降。

1、 設備文件
  ①、什麽是設備文件
    設備文件會關聯至一個設備驅動,進而能夠跟與之對應的硬件設備進行通信
  ②、設備文件分類:
    ?塊設備:block。存取單位"快"。典型代表:磁盤
    ?字符設備:char,存取單位"字符"。典型代表鍵盤

  ③、設備文件路徑:

    # /dev/dev_file

  ④、設備號碼標識:
    主設備號:major number,標識設備類型
    次設備號:minor number,標識同一類設備號下的不同設備

[root@oldboy dev]# ls -l /dev/ | grep "sda"
lrwxrwxrwx. 1 root root           4 May 23 16:37 root -> sda3
brw-rw----. 1 root disk      8,   0 May 29 05:40 sda    【註意:這是同一設備類型,所以主設備號都是8,由於是同一設備類型下的不同設備,所以次設備號不同,且sdade的次設備號是0
brw-rw----. 1 root disk      8,   1 May 23 16:37 sda1
brw-rw----. 1 root disk      8,   2
May 23 16:37 sda2 brw-rw----. 1 root disk 8, 3 May 23 16:37 sda3

  ⑤、硬盤接口類型
    接口速率而非硬件設備速率,同一個接口不同的硬盤速率不同

   並行(實現數據串行工作,類似雙向兩車道,但是之間有數據幹擾)

     IDE:133MB/s

     SCSI:640MB/s

   串口(實現數據串行工作,類型單向四車道)

     SATA3:6Gbps(需要除以8來得到實際速率)

     SAS:6Gbps

     USB:480MB/s

    單位(rpm): rotations per minute

  ⑥、磁盤設備的設備文件命名
    命名格式: /dev/DEV_FILE

    不同的主設備命名方法: /dev/sd#
      【註意:#代表a-z】
      如:

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

    同一主設備不同的分區命名:
      【直接使用數字區分】
       如:/dev/sda /dev/sda2 /dev/sda2 /dev/sda3

2、機械式硬盤【這一部分寫出來主要是了解作用:要了解什麽是磁道、扇區、柱面】

  機械硬盤主要由以下幾部分組成:機械手臂(Boom),磁頭(Head),轉軸(Spindle),盤片(Platter)組成,在實際應用中又將盤片分成了磁道(Track),扇區(Sector)和柱面(Cylinder)

  

技術分享圖片     

在實際應用中又將盤片分成了磁道(Track),扇區(Sector)和柱面(Cylinder)

       

技術分享圖片                       

3、分區原理知識點   前言:機械式硬盤是按柱面分區的      ①、0磁道0扇區     在傳統的系統上,當我們啟動計算機的時候,默認的最開始會讀取0磁道0扇區的數據,其大小是512bytes     它不屬於任何分區,用來標識我們創建的分區信息等     0磁道0扇區的大小不會算在分區裏面
446bytes: boot loader 主引導記錄
64bytes: 分區表
16bytes: 標識一個分區      【所以一個機械硬盤最多只能夠分4個主分區,或者3個主分區+擴展分區(N個邏輯分區)】
2bytes: 55AA用來標識結尾

實戰演練:(要知道 "dd"命令是幹什麽的)

# 備份MBR
dd if=/dev/sda1 of=/root/mbr bs=512 count=1

# 恢復MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1

# 恢復分區表:
dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66
  註:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用來確定分區表在備份文件中的位置

4、磁盤分區管理工具:【fdisk 、parted 、sfdisk

  本篇文章主要是講解fdisk進行磁盤分區操作

  fdisk 管理分區的前提條件:最多只能夠管理15個分區

  語法格式2: fdisk [-l, -u] [device]

    參數說明:如果不帶參數的話,直接進行分區

         -l:顯示當前系統分區情況;後面如果帶了具體的那個分區的話,就顯示那個分區結構

         -u:對磁盤進行分區操作

 

在使用fdisk命令的時候註意:
# fdisk -u /dev/sda    【正確】 # fdisk -u /dev/sda1    【錯誤】

 在分區操作上:以下是子命令管理操作

   p: print, 顯示已有分區;

n: new, 創建        【在分區的時候註意:因為必須保留1-4這4個數字給主分區和擴展分區使用,所以邏輯分區的數字必須從5開始】 d: delete, 刪除 w: write, 寫入磁盤並退出 q: quit, 放棄更新並退出 m: 獲取幫助 l: 列表所分區id t: 調整分區id

分區保存退出之後還要進行以下幾步操作才行

  ①、查看內核是否已經識別分區命令:

    # cat /proc/partaions

  ②、如果內核沒有識別,則通知內核重新讀取磁盤分區表   

    方法一:
      # partx [-a,-n] /dev/DEVICE
       -a:讀取全部全部分區表
       -n:讀取指定的分區表

    方法二:
      #kpartx [-a,-f] /dev/DEVICE
       -a:讀取全部全部分區表
       -f:強制讀取分區表 【註意:這種方法不建議使用,如果上面的讀取方法不行的話,最後才使用這種方法】

    方法三: 【註意:這個方法只適用於centos5.x系列】
      # partprobe [/dev/DEVICE]

   ③、做了上面幾步之後,如果想使用當前分區的磁盤的話,還需要格式化磁盤

      

案例分析:

[root@oldboy ~]# fdisk -l    【查看當前系統裏面的所有分區情況】
  
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006ac8d

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         113      694272   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             113        1306     9585664   83  Linux
[root@oldboy ~]# fdisk -u /dev/sda      【在磁盤sda上面創建新的分區】 WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘). Command (m for help): n Command action e extended p primary partition (1-4) e          【擴展分區】 Selected partition 4 First sector (63-20971519, default 63): Using default value 63 Last sector, +sectors or +size{K,M,G} (63-2047, default 2047): 1000 Command (m for help): p    【查看分區信息】 Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0006ac8d Device Boot Start End Blocks Id System /dev/sda1 * 2048 411647 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 411648 1800191 694272 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 1800192 20971519 9585664 83 Linux /dev/sda4 63 1000 469 5 Extended Partition 4 does not end on cylinder boundary. Partition table entries are not in disk order Command (m for help): w    【保存分區信息並退出】 The partition table has been altered! Calling ioctl() to re-read partition table. 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) Syncing disks. [root@oldboy ~]# cat /proc/partitions   【查看內核是否已經識別了分區,這裏內核沒有識別分區】 major minor #blocks name 8 0 10485760 sda 8 1 204800 sda1 8 2 694272 sda2 8 3 9585664 sda3 [root@oldboy ~]# partx -a /dev/sda    【通知內核重新讀取磁盤分區信息】 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 [root@oldboy ~]# cat /proc/partitions   【再次查看,內核已經識別了分區】 major minor #blocks name 8 0 10485760 sda 8 1 204800 sda1 8 2 694272 sda2 8 3 9585664 sda3 8 4 469 sda4

5、文件系統管理操作

  1)文件系統類型介紹:

  linux文件系統類型:ext2、ext3、ext4、xfs 【btfrs、reiserfs、jfs、swap(交換分區)、光盤(iso9660)】
  swap: 交換分區

  windows: fat32 、utfs
  unix: FFS、UFS、JFS2
  網絡文件系統:NFS、CIFS
  集群文件系統:GFS2、OCFS2
  分布式文件系統:ceph

  根據其是否支持"journal"功能,又分為
   日誌文件系統:ext3,ext4,xfs,...
   非日子文件系統:ext2,vfat

  文件系統的組成部分:

內核中的模塊:ext4, xfs, vfat 用戶空間的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat  【其實是一一對應的】

  Linux的虛擬文件系統:VFS------linux系統上可同時使用多種文件系統類型,最終都統一成VFS來進行管理,

             使用cat /proc/filesystems命令來查看系統支持的文件系統類型,

             lsmod命令能查看已裝載的模塊

2)創建文件系統(格式化):

  mkfs命令:  

  語法1: mkfs.FS_TYPE /dev/DEVICE

  語法2:mkfs -t FS_TYPE /dev/DEVICE [上面一個可以說成是下面這個的簡寫]

      FS_TYPE 選項:

        ext4、xfs、btrfs、vfat

      共同參數:

        -L # : 設定卷標名為#

案例詳解:

技術分享圖片
[root@oldboy ~]# mkfs.ext4 -L "myname" /dev/sda4  【創建文件系統的同時指定卷標】
mke2fs 1.41.12 (17-May-2010)
Filesystem label=myname
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
64 inodes, 468 blocks
23 blocks (4.91%) reserved for the super user
First data block=1
Maximum filesystem blocks=524288
1 block group
8192 blocks per group, 8192 fragments per group
64 inodes per group

Writing inode tables: done                            

Filesystem too small for a journal
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@oldboy ~]# blkid /dev/sda4    【查看文件系統類型】
/dev/sda4: LABEL="myname" UUID="0f2e4652-15aa-4589-8c3f-225f73b0c74d" TYPE="ext4" 
[root@oldboy ~]# 
View Code

3)文件系統專用管理工具:

  mke2fs命令 【是ext系列文件系統專用管理工具】

    語法:mke2fs [OPTIONS] /dev/DEVICE

        參數:

        -t: (ext2\ext3\ext4)
        -b:指定block大小,不指定的話默認(1024.2048.4096)
        -L: 指定卷標
        -j: 相當於 -t ext3

        -i # : 為數據空間中沒多少個字節創建一個inode;ci大小不應該小雨block大小
        -n # : 為數據空間創建多少個inode
        -m # : 為管理人員預留的空間占據百分比;默認百分之5的空間
        -O FEATURE[,...] : 啟用指定特性
        -O ^FEATURE[,...]: 關閉指定特性

    舉例:mke2fs -b 2048 -m 3 -L MYDATA /dev/sda4

4)創建交換分區

  命令:mkswap

    使用命令的前提:必須先調整其分區的ID為82 (使用fdisk 裏面的 "t" 選項實現)

    命令格式: mkswap [OPTIONS] ... DEVICE

      參數: -L : "LABLE"

5)其他常用工具

  blkid命令 :快設備屬性信息查看

    語法: blkid [OPTIONS]... [/dev/DEVICE]

      參數:        -L:根據指定的LABLE來查找對於的設備        -U:根據指定設備的UUID來查找對於的設備
         【註意:如果前面跟了參數的話,是根據指定參數來查找設備文件,後面路徑不要寫(寫了也沒有用);
      如果前面不給參數的話,是查看設備文件的UUID和LABEL等,後面就必須寫上是哪個設備文件】   技術分享圖片
[root@oldboy ~]# blkid /dev/sda4     【查看設備文件屬性信息】
/dev/sda4: LABEL="lable" UUID="d33ffdae-f171-492e-b3d5-6099dcbe5856" TYPE="ext4" 
[root@oldboy ~]# blkid -L lable  【根據設備文件的LABLE,找到該設備文件】     
/dev/sda4
[root@oldboy ~]#blkid -U "d33ffdae-f171-492e-b3d5-6099dcbe5856"   【根據設備文件的UUID,找到該設備文件】
Blkid 命令的用法

  e2lable命令:管理ext系列文件系統的LABLE

    語法: e2lable [LABLE] DEVICE

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

    參數:
     -l:查看文件系統的超級塊信息:super block
     -L ‘LABLE‘ : 修改卷標
     -j: 將 ext2 升級為ext3 (相當於 "-t ext3")
     -m # : 為管理人員預留的空間占據百分比;默認百分之5的空間
     -O FEATURE[,...] : 啟用指定特性
     -O ^FEATURE[,...] 關閉指定特性
      tune2fs -O has_journal /dev/sda5, 會把原先的ext2文件系統改為ext3,
      tune2fs -O ^has_journal /dev/sda5 禁用此屬性
     -o:調整文件系統的默認掛載選項,用法和上面一樣,關於屬性名可以man tune2fs來查看,
      例如tune2fs -o ^acl /dev/sda5 #禁用默認掛載選項的acl功能
     -U UUID : 修改UUID號;UUID但是隨機 生成的,要修改的場景不多

    

    dumpe2fs命令

    -h:  查看超級快信息

    舉例: dumpe2fs /dev/sda4 會詳細的顯示文件系統信息,或者說是布局信息,比如分組情況,塊信息,inode位置等

  

6)文件系統的檢測工具(常用於異常關機導致文件系統出錯的情況):

    註意事項:無論是異常關機還是正常關機,開機時不要進行文件自動檢測,最好是開機後進行文件手動檢測

    技術分享圖片

    

Linux下:磁盤管理和文件系統管理