五天學redhat系列之---文件系統管理

       套用文檔的一段話開頭:文件系統是牽涉到文件與目錄在計算機中的存儲。一個文件系統可以有不同的格式--稱作文件系統類型。這些格式決定着記錄到文件以及目錄內的信息。有些文件系統類型會記錄多餘的信息,而有一些則更注重讓文件操作更快。這一個部分我們將討論ext3/4/2,swap,raid,以及lvm的文件系統類型。還有一些類似parted的分區工具介紹,和用ACL來自定義文件權限。
       還是把鏈接貼一下:Storage Administration Guide,Logical Volume Manager Administration
      當然翻譯的不是很好,補充幾點,這裏將做幾個實驗把,fdisk這個工具的使用,raid,lvm等的用法,內容比較多,希望大家能耐心的看完! 來先看一下實驗環境,一臺RHEL6.2的虛擬機子,添加了四塊1GB的ide硬盤,有圖有真相。

      我們按照上頭的順序從ext3開始講吧。
ext3 日誌文件系統
 1 用fdisk 進行分區
 2 格式化文件系統
 3 打標籤
 4 創建掛載點
 5
加入開機啓動/etc/fstab
      看一下環境:/dev/下裝的都是設備文件
[root@kikupotter3 dev]# ll sd*
brw-rw----. 1 root disk 8,    0 11月    1 03:49 sda
brw-rw----. 1 root disk 8, 16 11月    1 03:49 sdb
brw-rw----. 1 root disk 8, 32 11月    1 03:49 sdc
brw-rw----. 1 root disk 8, 48 11月    1 03:49 sdd
 四塊IDE硬盤都進去了,嘿嘿。現在有搞頭了。
       我們先就是sda這塊硬盤。用fdisk這個命令來分區,好好介紹一下用法。
[root@kikupotter3 ~]# fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x394792ea.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
                 switch off the mode (command 'c') and change display units to
                 sectors (command 'u').

Command (m for help): //他說輸如m來獲取幫助
      然後我輸入m
Command (m for help): m
Command action
     a     toggle a bootable flag
     b     edit bsd disklabel
     c     toggle the dos compatibility flag
     d     delete a partition   //刪除一個分區
     l     list known partition types
     m     print this menu     //打開幫助
     n     add a new partition   //建一個新分區
     o     create a new empty DOS partition table
     p     print the partition table  //打印當前的分區表
     q     quit without saving changes //未保存退出
     s     create a new empty Sun disklabel
     t     change a partition's system id //更改分區類型
     u     change display/entry units 
     v     verify the partition table
     w     write table to disk and exit  //保存推出,區別q
     x     extra functionality (experts only)

      標記上紅色的是比較常用的,說白了沒用到的就不要去了解,瞭解了也沒啥用,沒有去操練就會忘記了的。
      下面的步驟輸出會很長,關鍵的部分我會打上紅色注意看哦
Command (m for help): p

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

//這個部分就是這個硬盤的參數的,算是很詳細。
     Device Boot            Start                 End            Blocks     Id    System

Command (m for help): n
Command action
     e     extended
     p     primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +300M

Command (m for help): p

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

     Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                    39            313236     83    Linux

Command (m for help): n
Command action
     e     extended
     p     primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (40-130, default 40):
Using default value 40
Last cylinder, +cylinders or +size{K,M,G} (40-130, default 130): +300M

Command (m for help): p

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

     Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                    39            313236     83    Linux
/dev/sda2                            40                    78            313267+    83    Linux

Command (m for help): n
Command action
     e     extended
     p     primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (79-130, default 79):
Using default value 79
Last cylinder, +cylinders or +size{K,M,G} (79-130, default 130): +300M

Command (m for help): p

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

     Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                    39            313236     83    Linux
/dev/sda2                            40                    78            313267+    83    Linux
/dev/sda3                            79                 117            313267+    83    Linux

Command (m for help): n
Command action
     e     extended
     p     primary partition (1-4)
p
Selected partition 4
First cylinder (118-130, default 118):
Using default value 118
Last cylinder, +cylinders or +size{K,M,G} (118-130, default 130):
Using default value 130

Command (m for help): p

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

     Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                    39            313236     83    Linux
/dev/sda2                            40                    78            313267+    83    Linux
/dev/sda3                            79                 117            313267+    83    Linux
/dev/sda4                         118                 130            104422+    83    Linux

Command (m for help):
     這樣就創建好分區了,如何這時候想保存此分區結果的話,輸入w
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
 
[root@kikupotter3 ~]# ls /dev/sda*
/dev/sda    /dev/sda1    /dev/sda2    /dev/sda3    /dev/sda4
       保存後我們扎dev下面就可以看到四個分區了。如果上面不相保存就直接按q就可以了。
       刪除分區也很簡單
Command (m for help): d //刪除
Partition number (1-4): 4 //刪的分區

Command (m for help): p //打印

Disk /dev/sda: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0xd540b437

     Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                    39            313236     83    Linux
/dev/sda2                            40                    78            313267+    83    Linux
/dev/sda3                            79                 117            313267+    83    Linux

     保存退出後,就剩下三個分區了。
[root@kikupotter3 ~]# ls /dev/sda*
/dev/sda    /dev/sda1    /dev/sda2    /dev/sda3
[root@kikupotter3 ~]#
      那fdisk命令就到這裏了,思路明白了?學命令不一定要一口氣記他個幾十個,會忘的親,現在還有好多命令我記不住的,還要百度google一下,而且是直接的關 鍵詞。所以關鍵還是在那個思路!!
      分區完了,第二步就是格式化文件系統,紅色部分字體重點看一下哦
[root@kikupotter3 ~]# mkfs.ext3 /dev/sda1
mke2fs 1.41.12 (17-May-2010)
文件系統標籤=
操作系統:Linux
塊大小=1024 (log=0)
分塊大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
78312 inodes, 313236 blocks
15661 blocks (5.00%) reserved for the super user
第一個數據塊=1
Maximum filesystem blocks=67633152
39 block groups
8192 blocks per group, 8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
  8193, 24577, 40961, 57345, 73729, 204801, 221185

正在寫入inode表: 完成                                                    
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.    Use tune2fs -c or -i to override.
      ext3很標準的完成了一個mkfs的過程,內節點的建立,日誌的建立,還有超級塊。
 最後一個提示是問你要不要做一下 tune2fs -c or -i,不然系統每經過25次mount   or 過180天會自動check。
      那麼現在可以來打一下標籤:
先來看一下man文檔,突然短路了想不起來
NAME
             e2label - Change the label on an ext2/ext3/ext4 filesystem

SYNOPSIS
             e2label device [ new-label ]

DESCRIPTION
             e2label    will display or change the filesystem label on the ext2, ext3,or ext4 filesystem located on device.
             If the optional argument new-label is not present, e2label will    simply   display the current filesystem label.
             If    the    optional    argument new-label is present, then e2label will set . the filesystem label to be new-label.   Ext2 filesystem labels can be at   most    16    characters    long
             if new-label is longer than 16 characters,  e2label will truncate it and print a warning message.

      很簡潔的幫助文檔,下面給/dev/sda1打標籤
[root@kikupotter3 ~]# e2label /dev/sda1 kiku
      用下面命令來看label的情況。blkid( command-line utility to locate/print block device attributes)
其實blkid是很強大的能夠打印出本地塊設備的屬性,默認情況下可以打出所有,這裏只是用到一下部分的內容,/dev/disk/下存的信息就是blkid用的 。
[root@kikupotter3 ~]# blkid -L kiku
/dev/sda1
      或者findfs:(findfs - Find a filesystem by label or UUID)
[root@kikupotter3 ~]# findfs LABEL=kiku
/dev/sda1
      然後創建一個目錄用於掛載
[root@kikupotter3 ~]# mkdir /mpoint
      最後寫入開機啓動
[root@kikupotter3 etc]# blkid /dev/sda1
/dev/sda1: LABEL="kiku" UUID="b47853df-11b0-407e-aa2a-762f5b4fb36e" SEC_TYPE="ext2" TYPE="ext3"
      編輯/etc/fstab 這個文件的寫法很簡單 終端運行命令:man 5 fstab 一看就會
LABEL=kiku /mpoint        ext3    default 0 0
      測試是否成功,這裏就體現了一個label的高級用法咯。估計用的不多,大多數情況都是用uuid,或者是/dev/sdaX這樣來寫。
[root@kikupotter3 etc]# mount -av
mount: UUID=dcba6422-90c2-4df0-b1b4-7dbf77f7610e already mounted on /boot
.......
mount: LABEL=kiku already mounted on /mpoint
nothing was mounted

   swap
      這個需要解釋一下,分區的時候爲什麼至少要分一個/跟swap,因爲Linux的文件系統結構是倒樹型的的,而/就是這個樹的頂端。所以的東西都在/的下面,所以單獨分/不會落下東西的,但是/下面沒有swap,它是自己獨立出來的,作爲虛擬內存的概念,當我們的物理內存不夠用的時候,就會調用這些swap的空間。所以swap是在本地硬盤的空間,而且硬盤的讀寫比內存慢得多得多,所以不是swap分得越多,用得越多越好,不是這樣的。一般情況下
 
內存2G
swap 2-3G
 內存4G swap3-5G
 內存8G swap4-6G
 內存16G swap 6-8G
內存32-64G
不超過16G
 雲芳你怎麼看?
     還有更直接的方法就是RAM的兩倍。
大牛你怎麼看?
     那有個建議是這樣說,swap用邏輯捲來做,就可以避免上面的分多少的問題了,不過了我把swap卸載下來,擴容一下再swapon上去。簡單省事。
     下面先操作一個簡單的製作一個swap文件讓系統用
創建一個文件
[root@kikupotter3 ~]# dd if=/dev/zero of=/swapfile bs=1024 count=65536
記錄了65536+0 的讀入
記錄了65536+0 的寫出
67108864字節(67 MB)已複製,0.254279 秒,264 MB/秒
     做成swap,格式化
[root@kikupotter3 ~]# mkswap -f /swapfile
Setting up swapspace version 1, size = 65532 KiB
no label, UUID=edf26f59-791d-4120-aa7c-9bc269577b86
     然後開始啓用並且加入開機啓動
[root@kikupotter3 ~]# swapon /swapfile
vim /etc/fstab //添加
/swapfile   swap   swap   defaults   0 0
     等下次開啓重啓的時候,我們到/proc/swap就能看到它了。或者mount -a
[root@kikupotter3 etc]# cat /proc/swaps
Filename        Type    Size  Used  Priority
/dev/dm-1                                                             partition  2064376  0  -1
/swapfile                                                             file    65528  0  -2
      看到了麼 類型還是文件呀,嘿嘿。上面一個是分區,那至少來說支持分區分文件的類型。
      然後再做個裸機卷的,再伸縮一下,調整大小。這個可以放在lvm那裏做。

  下面來raid,磁盤冗餘陣列
我們先做實驗再解釋這個東西。
     先到各自對應版本的驅動下面看看有沒有對應raid的.ko文件,這裏的話默認就支持下面幾種。
[root@kikupotter3 md]# pwd
/lib/modules/2.6.32-220.el6.x86_64/kernel/drivers/md
[root@kikupotter3 md]# ls raid*
raid0.ko    raid10.ko    raid1.ko    raid456.ko
     分區先準備一下,還是有fdisk命令,那這一次是把4個ide硬盤都分區了,而且都只分成一個主分區。唯一跟前面有區別的就是我該了一個分區類型
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

      改成raid支持的類型。這個是前期必須的工作哦!
Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                 130         1044193+    fd    Linux raid autodetect

Device Boot            Start                 End            Blocks     Id    System
/dev/sdb1                             1                 130         1044193+    fd    Linux raid autodetect

Device Boot            Start                 End            Blocks     Id    System
/dev/sdc1                             1                 130         1044193+    fd    L Device Boot            Start                 End            Blocks     Id    System
/dev/sdd1                             1                 130         1044193+    fd    Linux raid autodetect

inux raid autodetect

     查看/proc/mdstat
[root@kikupotter3 ~]# cat /proc/mdstat
Personalities :
unused devices: <none>
      現在下面還沒有,那麼我們另位開一個終端
[root@kikupotter3 ~]# watch -n0.5 "cat /proc/mdstat"Every 0.5s: cat /proc/mdstat                            Thu Nov  1 06:38:07 2012

Personalities :
unused devices: <none>

/實時的看,每隔0.5s看一次。

      用另位一個終端進行操作
[root@kikupotter3 ~]# mdadm -C /dev/md0 -l 1 -n /dev/sda1 /dev/sdb1 -x 1 /dev/sdc1
mdadm: invalid number of raid devices: /dev/sda1
[root@kikupotter3 ~]# mdadm -C /dev/md0 -l 1 -n 2 /dev/sda1 /dev/sdb1 -x 1 /dev/sdc1
mdadm: /dev/sda1 appears to contain an ext2fs file system
        size=313236K    mtime=Thu Nov    1 05:30:54 2012
mdadm: Note: this array has metadata at the start and
        may not be suitable as a boot device.    If you plan to
        store '/boot' on this device please ensure that
        your boot-loader understands md/v1.x metadata, or use
        --metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
      有圖有真相:

       還有一張成功的圖:
     這個是RAID1.
     那麼在/dev/下面就有一個md0剛剛生成的。
 
[root@kikupotter3 ~]# ll /dev/md0
brw-rw----. 1 root disk 9, 0 11月    1 06:42 /dev/md0
      那麼上面的動作只是把sda1 sdb1 sdc1 做成一個整體的md0了而已,還未格式化 文件系統
[root@kikupotter3 ~]# mkfs.ext3 /dev/md0
     好了可以掛載使用了
[root@kikupotter3 ~]# mount /dev/md0 /mnt
[root@kikupotter3 ~]# blkid /dev/md0
/dev/md0: UUID="dc1a7b6f-17c6-4629-9417-c6e411df8d29" TYPE="ext3" [root@kikupotter3 ~]# df -h
文件系統          容量  已用  可用 已用%% 掛載點
/dev/mapper/VolGroup-lv_root
                      5.5G  1.3G  4.0G  24% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/vda1             485M   31M  429M   7% /boot
/dev/md0             1004M   18M  936M   2% /mnt
       下面一步最關鍵了,我們來看看什麼加冗餘,什麼是陣列,最直觀的看圖。
還是打開監控端
[root@kikupotter3 ~]# watch -n0.5 "cat /proc/mdstat"cat\/proc/mdstat                                                       
       運行命令
[root@kikupotter3 ~]# mdadm -f /dev/md0 /dev/sda1
       然後你看:

觀察這張圖跟上面第一張圖的區別。
      能發現幾點,sda1由於某種原因壞點以後,sdc1頂了上去,而且未造成數據的丟失。那必須有幾個的小磁盤組成一個這樣的md0設備,而且必須要有空餘的即冗餘以保證事故後的恢復。
     那raid有好幾種不同的級別,不同的級別方式是不一樣的。
 levels 0, 1, 4, 5, 6, 10, and linear,共7種形式。
      那raid 到底有什麼樣的功能呢?
          1 .提高硬盤的讀寫效率,通重來說,幾個磁盤所組成的陣列,數據是分散在上面的,讀寫的時候,都是一起工作,那樣的效率比當個大容量磁盤要快好多。
           2.數據不容易丟失,因爲這個是raid最重要的功能,單點故障不會導致整個數據丟失。但是如果都壞了的話,那就很難說了。
       我們這裏所使用的都是軟件形式的raid,那麼實現中更多的是軟硬件結合,或者是純硬件的設備。
       剩下的部分要留給大牛來給我們說了,小弟的學識很淺薄只能到這裏了,沒有實際的生產經驗。
       還剩下最後一個部分 lvm,我之前就有寫過一篇寫的還可以,條例還比較強的說。
       把原文整理重發吧。實在困了,剛剛坐着睡着了,真心是一晚沒睡。。剩下的一些,下次補上。
      邏輯卷我原本聽來就是跟wins下的卷弄成一樣咯,大家都是卷嘛。wins下新建一個分區就是添加一個卷,還可以設置卷名等等。邏輯卷也有,添加捲跟卷名。怎麼辦?
       當然有辦法:
其實:wins下面的卷只單純分區,格式化後就能用了,就是一次分區,或者我們把它形象的說成一級分區;那邏輯卷是不是有好“幾級分區”,是的,把磁盤做成邏輯卷一共做了三次哦!所以我們形象得說邏輯卷是三級分區。
       好了,知道邏輯卷之後再來使用一下lvm這個工具,lvm(logical volume manager)邏輯卷管理工具。對邏輯捲進行四種管理動作
allocating disks 分配磁盤
striping        條帶化
mirroring        鏡像
resizing logical volumes. 自由定義邏輯卷大小。
       當然這四個動作完全可以不用GUI的界面做,強烈推薦命令行操作!簡單,容易記。
 邏輯卷的製作步驟:(聲明:本圖片來源於redhat 文檔網站
  pv(物理卷8e)---------->vg (虛擬硬盤)----------->lv(邏輯卷)



pv:我們可以把一個磁盤分成多個獨立的物理卷,標記爲8e;
vg:把多個獨立的物理卷放到一個卷組裏面管理,把物理卷揉成了一個整體;
lv:再把卷組這個整體進行以指定區單位的大小進行分配。最終形成邏輯卷
       注意:/boot不能做在邏輯捲上的,因爲grub不認lv,誰叫它搞得那麼複雜呀。所以做系統的時候如果採用邏輯卷的方案要把/boot單獨分出來。

邏輯卷的特點
      伸縮自如,特別是在主分區做成邏輯分區的時候,要是/(根)不夠的情況下就可以增加容量咯,哪個獨立分區的很少用但有佔了挺大的空間那就縮小一些。
特別注意: 增大邏輯卷的量不能超過,物理卷的實際大小;縮小邏輯卷後的大小不能小於所在操作的邏輯卷真實文件量的大小,比如2G的/home,我只用了500M那麼 你一定不能縮成比500M小,否則你懂的,建議不原來的大一些,看需求吧,縮成600M就好了。下面就把剩餘的56M在分給part_one!

實驗環境:
KVM+RHEL6.0 添加一個磁盤分區如下。8個等大的分區。實驗先用
/dev/sda5 ,/dev/sda6
Device Boot            Start                 End            Blocks     Id    System
/dev/sda1                             1                     1                8001     83    Linux
/dev/sda2                             2                 522         4184932+     5    Extended
/dev/sda5                             2                    66            522081     8e    Linux LVM
/dev/sda6                            67                 131            522081     8e    Linux LVM
/dev/sda7                         132                 196            522081     83    Linux
/dev/sda8                         197                 261            522081     83    Linux
/dev/sda9                         262                 326            522081     83    Linux
/dev/sda10                        327                 391            522081     83    Linux
/dev/sda11                        392                 456            522081     83    Linux
/dev/sda12                        457                 521            522081     83    Linux

     現在來看看做個邏輯卷需要那些命令。
製作邏輯卷的命令規則:
   pv+動作
   vg+動作
   lv +動作
第一步:製作物理卷
pv(物理卷)+動作
pvcreate //創建物理卷
[root@localhost ~]# pvcreate /dev/sda5
    Physical volume "/dev/sda5" successfully create
pvs           //查看物理卷
[root@localhost ~]# pvs
    PV                 VG     Fmt    Attr PSize     PFree    
    /dev/sda5             lvm2 a-     509.84m 509.84m
pvscan     //掃描系統上的物理卷
[root@localhost ~]# pvscan
    PV /dev/sda5                                            lvm2 [509.84 MiB]
    Total: 1 [509.84 MiB] / in use: 0 [0     ] / in no VG: 1 [509.84 MiB]
pvdisplay  //顯示物理卷的詳細信息
[root@localhost ~]# pvdisplay
    "/dev/sda5" is a new physical volume of "509.84 MiB"
    --- NEW Physical volume ---
    PV Name                             /dev/sda5     //物理卷名
    VG Name                            
    PV Size                             509.84 MiB        //物理卷大小
    Allocatable                     NO                             //不可分配
    PE Size                             0                                        // PE的大小
    Total PE                            0                                        //總PE數
    Free PE                             0                                     // 空閒PE
    Allocated PE                    0                                // 分配的PE
    PV UUID                             oKjG81-6OeW-BDZh-RLQ3-9rd0-kckI-dus810         //唯一ID

第二步:卷組的命令
vg(卷組)+動作
vgcreate    //記住卷組是有名字的呀,所以你建的時候記得要給弄個好名字。
[root@localhost ~]# vgcreate kiku /dev/sda5
    Volume group "kiku" successfully created
分析:如果要增加第二個pv咋辦,還create嗎?好像有點不合情理,kiku已經有了,我還create /dev/sda6?
vgextend kiku /dev/sda6 //很合理吧,在已經有的kiku組裏增加/dev/sda6,extend就是擴增,擴展的意思。
[root@localhost ~]# vgextend kiku /dev/sda6
    No physical volume label read from /dev/sda6
    Physical volume "/dev/sda6" successfully created
    Volume group "kiku" successfully extended
vgs          //查看卷組
[root@localhost ~]# vgs
VG     #PV #LV #SN Attr     VSize     VFree    
kiku     1     0     0 wz--n- 508.00m 508.00m

vgscan      //掃描系統上的卷組,他會去讀所有的pv然後確定pv是否有相應的組,然後更新出來
[root@localhost ~]# vgscan
Reading all physical volumes.    This may take a while...
    Found volume group "kiku" using metadata type lvm2
vgdisplay    //看卷組的詳細信息
[root@localhost ~]# vgdisplay
    --- Volume group ---
    VG Name                             kiku    //物理卷名
    System ID                        
    Format                                lvm2        //版本是2哦!
    Metadata Areas                1
    Metadata Sequence No    1
    VG Access                         read/write
    VG Status                         resizable
    MAX LV                                0    
    Cur LV                                0
    Open LV                             0
    Max PV                                0
    Cur PV                                1                                             //當前PV個數
    Act PV                                1                                                // 在或定的pv個數
    VG Size                             508.00 MiB                //vg大小
    PE Size                             4.00 MiB                         //PE的大小
    Total PE                            127                                         //總PE
    Alloc PE / Size             0 / 0                                     //分配的PE
    Free    PE / Size             127 / 508.00 MiB    //空閒PE
    VG UUID                             pybc9p-zjkG-9Fe1-yGM6-9m7t-g9Dw-wQ7S48

第三步:生成邏輯卷
原理:假如PE=4M(分配單元,區),意思是把所有的pv容量加在一起然後以一個PE爲單位進行分割,邏輯卷的大小就是靠指定的PE個數來確定。所以分出來的邏輯卷肯定是PE的整數倍。
lvcreate -n data -l  80 卷組
-n 指定lv的名字,-l指定pe的塊數

        現在我準備建3個lv, part_one, part_two, part_three,佔80PE,大小是320M。
[root@localhost ~]# lvcreate -n part_one -l 80    kiku
    Logical volume "part_one" created
[root@localhost ~]# lvcreate -n part_two -l 80    kiku
    Logical volume "part_two" created
[root@localhost ~]# lvcreate -n part_three -l 80    kiku
    Logical volume "part_three" created

        80X4=320M,說明是用PE個數來確定的!
[root@localhost ~]# lvdisplay | grep "LV Size"
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB

現在我們的都做完邏輯上的分區了,那麼肯定還差一步,創建文件系統。
mkfs.ext4            /dev/卷名/data
[root@localhost ~]# mkfs.ext4 /dev/kiku/part_one
mke2fs 1.41.12 (17-May-2010)
文件系統標籤=
操作系統:Linux
塊大小=1024 (log=0)
分塊大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
81920 inodes, 327680 blocks
16384 blocks (5.00%) reserved for the super user
第一個數據塊=1
Maximum filesystem blocks=67633152
40 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

正在寫入inode表: 完成                                                        
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.    Use tune2fs -c or -i to override.
       做下一tune2fs
[root@localhost ~]# tune2fs -i 0 -c 0 /dev/kiku/part_one
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 second
        如果要開機自動掛載那麼;這一部分就涉及了文件系統的管理哦
#blkid                                    // 這個命令很好用
/dev/vda1: UUID="efd0f0d2-f8ce-4e39-a253-c1c7c1ccc85c" TYPE="ext4"
/dev/vda2: UUID="a4c93ea1-cab7-457f-a821-1d7491f7586f" TYPE="swap"
/dev/sda5: UUID="oKjG81-6OeW-BDZh-RLQ3-9rd0-kckI-dus810" TYPE="LVM2_member"
/dev/sda6: UUID="rN4kQz-RwXW-bByF-ysfn-I592-epwt-NFdkzn" TYPE="LVM2_member"
/dev/mapper/kiku-part_one: UUID="d19698f5-2672-4e1d-b1c0-6b2454ba3493" TYPE="ext4"
[root@localhost ~]# cd /etc/
[root@localhost etc]# cp fstab fstab.bak //養成習慣先備份!
cp:是否覆蓋"fstab.bak"? y
[root@localhost etc]# vim fstab
        mount --a //開機自動掛載咯:成功
[root@localhost ~]vim /etc/fstab
/dev/mapper/kiku-part_one    /part_one     ext4    defaults    0    0
mount -a //看看有沒有自動掛載。
[root@localhost etc]# mount -a /dev/mapper/kiku-part_one
mount: /dev/mapper/kiku-part_one already mounted or /part_one busy
mount: according to mtab, /dev/mapper/kiku-part_one is already mounted on /part_one

問題思考:這些步驟做完了,那麼基本上沒問題了。one,two ,three 都等大而且可用.那麼可能用的時候你發現,one ,不夠用了!!!而three還有很多沒用,而且很少熱動他,現在可以考慮把,three縮小給one。

以下幾點務必上心:
       擴大可以熱操作;但是縮小一定冷操作!
       擴大不能超過pv值;縮小不能大於文件容量!
[root@localhost ~]# vgs
    VG     #PV #LV #SN Attr     VSize        VFree
    kiku     2     3     0 wz--n- 1016.00m 56.00m

[root@localhost ~]# vgdisplay | grep "PE"
    PE Size                             4.00 MiB
    Total PE                            254
    Alloc PE / Size             240 / 960.00 MiB
    Free    PE / Size             14 / 56.00 MiB

       語法:lvextend -L +1G(增量) 或者4G(絕對值) /dev/卷名/data
[root@localhost ~]# lvextend -L +56M    /dev/kiku/part_one
    Extending logical volume part_one to 376.00 MiB
    Logical volume part_one successfully resized
      查看結果:
[root@localhost ~]# vgs
    VG     #PV #LV #SN Attr     VSize        VFree
    kiku     2     3     0 wz--n- 1016.00m        0
[root@localhost ~]# vgdisplay | grep "PE"
    PE Size                             4.00 MiB
    Total PE                            254
    Alloc PE / Size             254 / 1016.00 MiB
    Free    PE / Size             0 / 0    
[root@localhost ~]# lvdisplay | grep "Size"
    LV Size                                376.00 MiB
    LV Size                                320.00 MiB
    LV Size                                320.00 MiB
[root@localhost ~]# lvdisplay | grep "LE"
    Current LE                         94
    Current LE                         80
    Current LE                         80


       resize2fs    /dev/卷名/邏輯卷名  大小
       我們來仔細看一下這resize2fs到底有什麼用:
[root@studnet20 ~]# man resize2fs
NAME
             resize2fs - ext2/ext3/ext4 file system resizer(用來做ext2,3,4重新定義大小的工具)
SYNOPSIS
             resize2fs    [    -fFpPM    ]    [ -d debug-flags ] [ -S RAID-stride ] device [
             size ]

DESCRIPTION
The resize2fs program will resize ext2, ext3, or ext4 file systems.(這個程序將會調整ext2,3,4的文件系統大小)    It can    be    used    to enlarge or shrink an unmounted file system located on device(可以用來擴大或縮小沒有掛載的文件系統!!很重要哦!).    If the filesystem is mounted, it can be    used    to    expand    the size    of    the    mounted filesystem(如果該文件系統已經掛載了,哪這個工具只能用來擴展文件系統的大小!!), assuming the kernel supports on-line resizing.(而且還需要內核的支持才能線上調節) (As of this writing, the Linux 2.6 kernel    supports    on-line resize for filesystems mounted using ext3 only.)2.6內核,只支持ext3的在線操作!

縮小要卸載:
      從上到下縮小。文件系統--->分區,分區一定不能蓋過文件系統。
root@localhost ~]# resize2fs /dev/kiku/part_one 300M //先從文件系統開始操作
resize2fs 1.41.12 (17-May-2010)
請先運行 'e2fsck -f /dev/kiku/part_one'.
他說要先做一下e2fsck -f 的動作才行!
[root@localhost ~]# e2fsck -f /dev/kiku/part_one
e2fsck 1.41.12 (17-May-2010)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/kiku/part_one: 11/96256 files (0.0% non-contiguous), 22405/385024 blocks
做完之後繼續:
[root@localhost ~]# resize2fs /dev/kiku/part_one 300M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/kiku/part_one to 307200 (1k) blocks.
The filesystem on /dev/kiku/part_one is now 307200 blocks long.

       文件系統做完之後,該做分區上的動作了,現在對邏輯捲縮小!
[root@localhost ~]# lvreduce -L    300M /dev/kiku/part_one
    WARNING: Reducing active logical volume to 300.00 MiB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce part_one? [y/n]: y
    Reducing logical volume part_one to 300.00 MiB
    Logical volume part_one successfully resized
日誌提示已經成功咯!

      現在的話我想不用邏輯捲了,把實驗環境卸掉。那麼跟縮小的思路差不多,要成上面開始:
     卸載+remove
     卸載lv ------>卸載vg----------->卸載pv
     這樣做完就能釋放/dev/sda5 /dev/sda6
      vgreduce 卷名 /dev/sdb6     // 要脫掉lv然後在刪除。
[root@localhost ~]# lvremove /dev/kiku/part_one
Do you really want to remove active logical volume part_one? [y/n]: y
    Logical volume "part_one" successfully removed
[root@localhost ~]# lvs             //part_one已經沒了哦
    LV                 VG     Attr     LSize     Origin Snap%    Move Log Copy%    Convert
    part_three kiku -wi         a-320.00m                                                                            
    part_two     kiku -wi-a- 320.00m    

[root@localhost ~]# vgremove kiku            //卸載卷組
    Volume group "kiku" successfully removed

[root@localhost ~]# pvremove /dev/sda5    //最後卸載物理卷
    Labels on physical volume "/dev/sda5" successfully wiped
[root@localhost ~]# pvremove /dev/sda6
    Labels on physical volume "/dev/sda6" successfully wiped
      總算羅嗦完了,這就是菜鳥能之所以能完成實驗的原因,慢慢看,慢慢想,慢慢做。熬夜做好的。
       希望看的朋友多留些建議。謝謝,先去睡覺了哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章