深入剖析Linux磁盤管理

一、linux中常見的磁盤:

    無論什麼操作系統,歸根還是要落實與磁盤上的,對於磁盤的管理也是linux管理必備的一項技能。在linux中“一切皆文件”的思想貫徹整個linux的學習中,包括像是磁盤等的硬件也是在linux的/dev/目錄下類似於文件形式的存放,常見的SATA口USB優盤或是SCSI口的硬盤在linux中是以/dev/sd[a-p]開頭的文件,早期的IDE硬盤現在已經很少見了,這種硬盤在linux中是以/dev/hd[a-d],CDROM是以/dev/cdrom開頭的文件,磁帶機/dev/st0(SCSI口的),/dev/ht0(IDE口)。每一種設備都有特定的主設備號和次設備號,主設備號用來標識設備類型,次設備號標識同一類型設備的不同設備。

    不同類型的接口的設備速度也是有很大差別的,像是並口的IDE的接口理論值爲133MB/s,SCSI硬盤速度爲640MB/s 。串口的SATA和SAS口的硬盤速度都是6Gbps,在轉化爲同一單位的情況下後者的速度還是遠遠優於前者。串口的USB速度也能達到480MB/s

二、 磁盤結構與術語:

  硬盤的物理結構一般由磁頭與盤片、電動機、主控芯片與排線等部件組成;當主電動機帶動盤片旋轉時,副電動機帶動一組( 磁頭)到相對應的盤片上並確定讀取正面還是反面的碟面,磁頭懸浮在碟面上畫出一個與盤片同心的圓形軌道( 磁軌或稱 柱面),這時由磁頭的磁感線圈感應碟面上的磁性與使用硬盤廠商指定的讀取時間或數據間隔定位 扇區,從而得到該扇區的數據內容; 1472368583149341.jpg1472368583604145.png

磁頭(head):對磁盤的數據進行讀寫

磁道(track):當磁盤旋轉時,磁頭若保持在一個位置上,則每個磁頭都會在磁盤表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道。 磁盤上的磁道是一組記錄密度不同的同心圓

扇區(sector):磁盤上的每個磁道被等分爲若干個弧段,這些弧段便是硬盤的扇區。硬盤的第一個扇區,叫做引導扇區。 一個扇區的大小爲512個字節。

柱面(cylinder):在有多個盤片構成的盤組中,由不同盤片的面,但處於同一半徑圓的多個磁道組成的一個圓柱面。

三、分區類型:

1.  磁盤分區的優點:

    (1) 優化I/O性能

    (2)實現磁盤的空間配額限制

    (3)提高修復速度

    (4)隔離系統和程序

    (5)分區可以安裝多個OS

2.  兩種分區方式:MBR和GPT

MBR:(master  boot recorder )傳統的分區都是以MBA的方式分區的使用32位作爲扇區數,分區大小不差過2T,分區是按照柱面來分區(CHS:cylinder,head,sector),在MBR中有LBA地址用來和CHS轉換,LBA地址是統一的邏輯區塊地址作爲尋址方式,這種尋址模式取代了原先 操作系統必須面對存儲設備硬件構造的方式。在硬盤上的0磁道0扇區共512個字節存放MBR硬盤分區分區表和主引導程序,其中前446個字節存放引導程序,64個字節存放4個大小爲16個字節的分區表,最後還有兩個字節(0x55AA)是分區結束標誌。

3.bmp


(可以通過十六進制查看器查看,先通過dd命令將硬盤的前512個字節備份成一個二進制文件,在通過hexdump 查看)

[root@centos7 ~]# dd if=/dev/sdc  of=sdc  count=512  bs=1
512+0 records in
512+0 records out
512 bytes (512 B) copied, 0.00509351 s, 101 kB/s
[root@centos7 ~]# hexdump -C sdc
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  91 83 ce 77 00 00 00 20  |...........w... |
000001c0  21 00 83 9d 11 4c 00 08  00 00 00 c0 12 00 00 9d  |!....L..........|
000001d0  12 4c 83 db 29 72 00 c8  12 00 00 60 09 00 00 00  |.L..)r.....`....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
[root@centos7 ~]# dd if=sdc_head  of=/dev/sdc bs=1 count=64 skip=446 seek=446 //skip表示源文件跳過多少開始複製,seek表示目標跳過多少開始
64+0 records in
64+0 records out
64 bytes (64 B) copied, 0.0170671 s, 3.7 kB/s

    註釋:其中4個分區最多可以建立4個主分區,或者3個主分區加一個擴展分區,主分區結構如上,第一個字節表示此分區是否處於活動分區狀態,80表示活動,00表示非活動,活動分區可以用來存放操作系統。第二個字節表示磁頭號,第3和4字節存放扇區號第5個字節表示分區類型,0表示分區未使用。5,6,7字節表示分區結束的磁頭號,扇區和柱面號。後面的八個字節用來存放LBA地址,用來做CHS和LBA地址轉化用的。

  擴展分區中存放着邏輯分區的地址,在邏輯分區的第一個扇區也是存放着EBR表,結構與MBR類似,只不過前面的446字節都空着,存放64字節的表中第一個表項的16個字節指向本個邏輯分區,下一個16個字節的表項中存放指向下一個擴展分區的EBR,接下來便是兩個空白的表項和類似於MBR的結束標誌0x55AA。

3.GPT分區:

  GPT分區是新一代的分區方式,可支持多分區(最多128個分區)和大分區(磁盤塊大小爲512字節時可支持8Z,4096字節的塊大小時可以達到64Z。注Z的數量級爲270)。GPT使用128位的UUID作爲磁盤和分區的同一唯一標識符,並且在GPT分區表自動備份在頭尾兩部分,並伴有CRC校驗位,在GPT分區的首部有一個僞MBR,用於向下兼容MBR,因爲MBR是不能理解GPT分區的,在GPT分區首部放置一個僞MBR首部可以防止MBR認爲當前磁盤沒有分區,而將GPT分區覆蓋。

4.bmp


四、幾種分區工具:

1.圖形化工具gnome-disks使用簡單,在此不在贅述。

2.fdisk使用:

fdisk支持MBR,也支持GPT分區,對於一塊硬盤最多隻能理解15個分區,一般使用fdisk做MBR分區,gdisk做GPT分區。下面爲fdisk分區示例:

[root@centos7 ~]# fdisk /dev/sde
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf734a8be.
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  //刪除分區
   g   create a new empty GPT partition table  //創建GPT分區表
   G   create an IRIX (SGI) partition table
   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  //保存退出
   x   extra functionality (experts only) 
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last&n

五、文件系統的掛載mount:

1. 掛載命令mount使用:

(1)掛載: 將額外文件系統與根文件系統某現存的目錄建立起關聯關係,進而使得此目錄做爲其它文件訪問入口的行爲,掛載點下原有文件在掛載完成後會被臨時隱藏

(2) 卸載:爲解除此關聯關係的過程,可使用設備,也可以使用掛載點

(3) 用法:

         mount 設備 掛載點

    設備類型:

        1) 可以使用設備文件如/dev/sda;

        2) 可以使用卷標如SDA_LABEL;

        3) 可以使用UUID;

        4) 僞文件系統;proc,sysfs……

        5) dd創建的image文件使用loop選項

        6) 目錄掛載至目錄,使用bind或-B,fstab配置文件分區類型爲none

(4) mount 常用選項:

         -t  指定文件系統類型

         -r  只讀掛載

         -w 讀寫掛載

         -n 不更新/etc/mtab,通過mount看不到掛載的文件系統,只有cat /proc/mounts

                   纔可以看到

         -a 自動掛載所有支持自動掛載的設備。定義在/etc/fstab中且支持auto功能

         -L 以卷標指定的設備掛載

         -U 以UUID指定的掛載設備

         -B --bind 綁定一個目錄到另一個目錄

[root@centos7 mnt]# mount -B /root/ /mnt/root

配置文件寫法:

[root@centos7 smb]# tail -n1 /etc/fstab
/root/        /mnt/root      none      bind,defaults   0 0
[root@centos7 mnt]# mount |grep "root"
/dev/sda2 on /mnt/root type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

掛載windows的共享文件夾:

[root@centos7 mnt]# mount -o username=administrator,password=admin -t cifs  //10.1.1.88/f   /mnt/smb

掛載loop設備:

[root@cnode6_8 /]# dd if=/dev/zero of=/testdir/loopdev bs=1M count=50 //dd創建一個文件
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 2.04763 s, 25.6 MB/s
[root@cnode6_8 /]# mkfs.ext4 /testdir/loopdev //將改文件格式化爲ext4
mke2fs 1.41.12 (17-May-2010)
/testdir/loopdev is not a block special device.
Proceed anyway? (y,n) y   ====> 回答y開始格式化
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
12824 inodes, 51200 blocks
2560 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=52428800
7 block groups
8192 blocks per group, 8192 fragments per group
1832 inodes per group
Superblock backups stored on blocks:
         8193, 24577, 40961
 
Writing inode tables: done                           
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@cnode6_8 /]# mkdir /mnt/loopdev //創建掛載點
[root@cnode6_8 /]# mount  -o loop /testdir/loopdev /mnt/loopdev //手動掛載
[root@cnode6_8 /]# mount |grep loop //檢驗是否成功
/testdir/loopdev on /mnt/loopdev type ext4 (rw,loop=/dev/loop0)
[root@cnode6_8 /]# umount /mnt/loopdev //卸載,嘗試寫入文件永久掛載
[root@cnode6_8 /]# vim /etc/fstab
[root@cnode6_8 /]# tail -n1 /etc/fstab //配置文件添加的部分
/testdir/loopdev       /mnt/loopdev             ext4      loop,defaults  0 0
 [root@cnode6_8 /]# mount -a
[root@cnode6_8 /]# mount |grep loop //配置文件生效
/testdir/loopdev on /mnt/loopdev type ext4 (rw,loop=/dev/loop0)
[root@cnode6_8 /]# losetup -a 
/dev/loop0: [0803]:11 (/testdir/loopdev)

註釋:通過losetup查看loop設備與分區的關聯情況,也可以手工指定哪一個loop設備關聯某一個分區,losetup   /dev/loop2 /testdir/partfile就是關聯loop2和分區關聯。可以寫loop設備到目錄的掛載,分區其實是關聯了一個loop設備,在rhel6中有8個loop設備,在rhel7中是動態建立的

使用mknod創建block或者字符設備其中b是指block,7是loop設備的編號,67是第多少個loop設備,可以先查看一下系統的loop設備編號到多少

[root@cnode6_8 testdir]# mknod loopd b 7 67
[root@cnode6_8 testdir]# ll loopd
brw-r--r--. 1 root root 7, 67 Jul 27 19:46 loopd

-o 常用選項(多個選項之間用逗號分割,在配置文件/etc/fstabdefaults的位置寫)

       async:異步模式,加載到內存的文件修改之後不會立即同步到硬盤,能提高性能

       sync:同步模式,內存更改立即保存至文件,提高文件可靠性

       atime/moatime: 目錄訪問時間戳,例如web的目錄時間戳沒必要更新時可禁用

       auto/noauto: 是否支持自動掛載,automount -a 自動可掛載

       exec/noexec: 是否支持在文件系統上運行應用程序

       dev/nodev: 因爲設備文件也是文件,dev表示支持在此目錄上建立dev設備

suid/nosuid: 是否支持suidsgid權限

remount :重新掛載

ro:只讀

rw:讀寫模式

user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載設備

defaults:相當於rwsuiddevexecautonouserasync

2. 查看與卸載命令:因爲一個文件系統有可能不止一個用戶訪問,所以有可能不能卸載

findmnt 查看掛載情況;

[root@cnode6_8 ~]# findmnt /
TARGET SOURCE    FSTYPE OPTIONS
/      /dev/sda2 ext4   rw,relatime,seclabel,barrier=1,data=ordered
[root@cnode6_8 ~]# findmnt /dev/sda1
TARGET SOURCE    FSTYPE OPTIONS
/boot  /dev/sda1 ext4   rw,relatime,seclabel,barrier=1,data=ordered

 

lsof 或fuser -v 查看訪問指定文件系統的進程


[root@cnode6_8 ~]#lsof /root
014657 /root
lsof    3440 root  cwd    DIR   8,2  4096 3014657 /root
[root@cnode6_8 ~]# fuser -v /root
 USER   PID ACCESS COMMAND
/root:   root  2292 ..c.. bash
root       3357 ..c.. bash


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

[root@cnode6_8 ~]# umount /testdir  //設備忙,無法卸載
umount: /testdir: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[root@cnode6_8 ~]# fuser -v /testdir //查看到user jack在使用
                     USER        PID ACCESS COMMAND
/testdir:            jack       3535 ..c.. bash
[root@cnode6_8 ~]# fuser -km /testdir //強制殺掉在使用分區的進程
/testdir:             3535c
[root@cnode6_8 ~]# umount /testdir
[root@cnode6_8 ~]#     //再次卸載已經成功

 

3. 永久掛載的配置文件/etc/fstab


    /etc/fstab配置文件是在系統重啓時文件系統掛載要讀的配置文件,一旦寫錯可能致使操作系統無法啓動,所以操作一定要小心!!!如在rhel6中掛載的設備名字寫錯,在檢測的選項又設置了開機檢測文件系統,那麼此時在開機時將一直卡在輸入ctrl+D或者輸入root密碼繼續,此時可以輸入密碼重新掛載 / 文件系統,因爲此時的 / 文件系統是隻讀的,需要重新掛載爲可讀可寫的,然後編輯/etc/fstab 文件修改開機檢測項爲0,即不檢測,然後繼續,最後繼續(ctrl +D)繼續開機,等到開機檢查哪一項除了問題,修改即可。rhel7不需要重新掛載 / 文件系統,可以直接編輯文件過程與rhel6類似,如果任然無法啓動可以輸入root密碼,重新啓動(systemctl reboot


  /etc/fstab 文件格式:

fstab.bmp

(1)要掛載的設備或僞文件系統:可以是設備名,UUIDLABEL,僞文件系統,目錄等

(2) 掛載點:設備要掛載的目錄,一般要放在/mnt下面

(3)  文件系統類型:一般的文件系統類型,還有none(目錄)

(4)掛載選項default-o指定的各種項

(5)  轉儲頻率0表示不備份,1表示每天轉儲,2表示隔天轉儲

(6) 自檢次序0表示不自檢,1一般用來表示根文件系統自檢順序

4. 掛載的文件系統的查看:


df :查看文件系統的掛載情況,可以加-T選項,在設備名比較長可以對其顯示,方便編寫腳本對數據進行處理

du:查看目錄的大小情況

mount:可以查看到包括目錄等的掛載情況,但是在掛載時加-n就查看不到了

cat  /proc/mounts  可以看到系統實時文件系統生效的掛載項

free :可以看到所有內存交換分區信息

cat  /proc/swaps 可以看到交換分區信息,包括使用哪個分作作爲交換分區

六、usb設備和CD-ROM的使用

1. usb設備的使用:

usb設備使用時可事先查看當前系統的分區和磁盤信息,方便知道插入usb設備後多了那些設備便於管理,usb設備同其它分區一樣也需要掛載和卸載,數據寫完後可以多次輸入sync保證數據確實已經全部保存至usb設備

2. CD-ROM設備使用:

使用eject可以彈出光驅,eject -t彈入。linux中自帶打包iso後綴文件的工具,如果是文件可以直接使用cp命令目標文件帶有iso後綴即可,如果是目錄,可以使用mkisofs 打包。iso文件掛載後可以使用

[root@cnode6_8 image]# touch {a..f}.txt
[root@cnode6_8 image]# ls
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt
[root@cnode6_8 image]# cd ..
[root@cnode6_8 ~]# mkisofs -r -o img.iso  image  //給image目錄建立鏡像文件,-r遞歸,-o是輸入文件
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 631
Total directory bytes: 946
Path table size(bytes): 10
Max brk space used 0
175 extents written (0 MB)
[root@cnode6_8 ~]# ls
img.iso    image

七、交換分區的建立與啓用:

    交換分區是作爲內存的一個輔助分區,在內存吃緊時,交換分區會作爲內存的一部分使用,但是效率比起內存來說會很低下,在一個硬盤分區時最好使用柱面較小的 柱面作爲交換分區,因爲在機械硬盤轉速一定的情況下,越靠近外面的磁道,線速度越大,讀取到的扇區越多,一定程度上有利於提高性能

     交換分區需要在分區時指定分區類型爲82,分區結束要同步磁盤,最後更改配置文件永久掛載,更改配置文件時可以給指定的分區指定優先級系統默認的優先級爲 -1開始每增加一個分區,新增加的分區優先級就-1,並且優先級越大,優先級越高,手工指定的優先級可以是0-32768,在配置文件當中default 的位置寫優先級pri=#

分區類型和掛載點都是swap,其他的設置與普通分區使用沒有區別。最後改完配置,格式化爲swap分區,並激活;

詳細步驟如下:

[root@cnode6_8 ~]# fdisk /dev/sdb  //開始新建分區
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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (15-2610, default 15):
Using default value 15
Last cylinder, +cylinders or +size{K,M,G} (15-2610, default 2610): +100M
 
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82  //改變分區hex dode爲82swap分區
Changed system type of partition 2 to 82 (Linux swap / Solaris)
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x4340940f
   Device Boot   Start End   Blocks   Id  System
/dev/sdb1        1   14    112423+   fd  Linux raid autodetect
/dev/sdb2       15   28     112455   82  Linux swap / Solaris
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@cnode6_8 ~]# partx -a /dev/sdb  //通知內核新增分區
BLKPG: Device or resource busy
error adding partition 1
 [root@cnode6_8 ~]# mkswap -L new_swap1 /dev/sdb2 //設定label,格式化分區
Setting up swapspace version 1, size = 112448 KiB
LABEL=new_swap1, UUID=15c17561-d356-42f4-a5ba-b05d62d6260a
[root@cnode6_8 ~]# vim /etc/fstab  //添加配置信息永久添加swap
[root@cnode6_8 ~]# tail -n1 /etc/fstab
UUID=15c17561-d356-42f4-a5ba-b05d62d6260a swap swap defaults,pri=100  0 0
[root@cnode6_8 ~]# mount -a
[root@cnode6_8 ~]# free -h
        total   used    free  shared   buffers  cached
Mem:  980M  294M   686M     216K  30M    119M
-/+ buffers/cache:    143M     836M
Swap:      2.0G     0B    2.0G
注:buffer存放元數據,cache存放普通緩衝數據
[root@cnode6_8 ~]# swapon -a  //激活所有swap分區
[root@cnode6_8 ~]# free -h
      total     used    free   shared    buffers   cached
Mem:    980M    294M    685M    216K     30M      119M
-/+ buffers/cache:   144M    836M
Swap:    2.1G          0B       2.1G
[root@cnode6_8 ~]# cat /proc/swaps   //可以看到指定的優先級100生效
Filename   Type        Size   Used      Priority
/dev/sda5  partition   2097148  0    -1
/dev/sdb2  partition   112448   0    100
[root@cnode6_8 ~]# swapoff /dev/sdb2 //關閉新建的交換分區
[root@cnode6_8 ~]# cat /proc/swaps
Filename     Type    Size  Used    Priority
/dev/sda5    partition 2097148  0       -1
[root@cnode6_8 ~]# vim /etc/fstab  //刪除添加的表項
[root@cnode6_8 ~]# fdisk /dev/sdb
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): d   //刪除交換分區的分區
Partition number (1-4): 2
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@cnode6_8 ~]# partx -d /dev/sdb  //通知內核同步分區
error deleting partition 1: BLKPG: Device or resource busy
error deleting partitions 3-256: BLKPG: No such device or address
[root@cnode6_8 ~]# lsblk /dev/sdb  //已經徹底刪除分區
NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sdb       8:16   0    20G  0 disk 
└─sdb1    8:17   0 109.8M  0 part 
  └─md0   9:0    0   217M  0 raid5
[root@cnode6_8 ~]# swapon -s  //通過swapon -s查看交換分區信息
Filename   Type     Size  Used   Priority
/dev/sda5  partition  2097148  0     -1

八、磁盤配額:

    quota就是限額的意思,對於linux來說,linux系統是多任務多用戶的操作系統,如果一個用戶使用磁盤過多,必然會導致其他用戶使用磁盤額度收到限制,quota就是針對這種情況應用而生的,但是quota對配額時必須是一個獨立的分區纔可以,並且是僅僅針對普通用戶有效,對於root是無效的。

下面將針對家目錄不是某一個獨立的分區,新建分區後對家目錄進行遷移至獨立分區。quota的限制既可以針對用戶,也可以針對針對組來做,可以限制總文件的大小,也可以限制iNode數量來限制。在配置文件當中,有一個soft和hard,這兩個值軟限制值一般小於應限制值,當用戶數據大於soft小於hard時,系統會在用戶每次登陸系統都報警,提示用戶清理磁盤,默認有一個寬限值7天,如果在這7天,用戶都沒有進行清理,soft的值將會取代hard值,用戶將無法建立新文件。主要用途一般被用來例如網頁服務器的每個人需要一定的空間。郵件服務器每個人郵箱都有固定的大小等。


  具體示例:(關於分區格式化再次不在贅述格式化分區爲/dev/sdb2) 

[root@cnode6_8 ~]# mkdir /mnt/home  //創建臨時掛載點,提供將原來/home數據複製至新建的分區
 [root@cnode6_8 ~]# mount /dev/sdb2  /mnt/home //掛載臨時掛載點
[root@cnode6_8 ~]# cp -Rp /home/*  /mnt/home/  //遞歸保留權限複製數據
[root@cnode6_8 ~]# ll /mnt/home/
total 8
drwx------. 4 jack jack 4096 Jul 25 17:22 jack
drwx------. 4 rose rose 4096 Jul 25 17:24 rose
[root@cnode6_8 ~]# vim /etc/fstab
[root@cnode6_8 ~]# tail -n1 /etc/fstab
UUID="424b6201-3ee2-4a3b-a288-75e91f52f71b" /home ext4 defaults,usrquota,grpquota 0 0  //fstab文件配置
[root@cnode6_8 ~]# mount -a  //掛載分區
[root@cnode6_8 ~]# mount |grep "sdb2"
/dev/sdb2 on /home type ext4 (rw,usrquota,grpquota)
 [root@cnode6_8 ~]# mount |grep "sdb2"
/dev/sdb2 on /home type ext4 (rw,usrquota,grpquota)
[root@cnode6_8 ~]# quotacheck -cug /home/
quotacheck: Mountpoint (or device) /home not found or has no quota enabled.
quotacheck: Cannot find filesystem to check or filesystem not mounted with quota option.  //提示掛載選項沒有生效
 [root@cnode6_8 ~]# mount -o remount /home  //重新掛載
[root@cnode6_8 ~]# mount |grep sdb2
/dev/sdb2 on /home type ext4 (rw,usrquota,grpquota)
[root@cnode6_8 ~]# quotacheck -cug /home  //重新生成配額數據庫文件
quotacheck: Cannot create new quotafile /home/aquota.user.new: Permission denied  //因爲selinux的原因創建數據庫文件失敗
quotacheck: Cannot initialize IO on new quotafile: Permission denied
quotacheck: Cannot create new quotafile /home/aquota.group.new: Permission denied
quotacheck: Cannot initialize IO on new quotafile: Permission denied
[root@cnode6_8 ~]# setenforce 0  //臨時關閉selinux       
[root@cnode6_8 ~]# vim /etc/selinux/config  //永久改變selinux狀態
[root@cnode6_8 ~]# grep disable /etc/selinux/config
#     disabled - No SELinux policy is loaded.
SELINUX=disabled   //selinux配置文件修改項
[root@cnode6_8 ~]# quotacheck -cug /home
[root@cnode6_8 ~]# ll /home   //查看用戶和組數據庫文件,是否已經建立
total 24
-rw-------. 1 root root 7168 Jul 28 01:16 aquota.group
-rw-------. 1 root root 7168 Jul 28 01:16 aquota.user
drwx------. 4 jack jack 4096 Jul 25 17:22 jack
drwx------. 4 rose rose 4096 Jul 25 17:24 rose
[root@cnode6_8 ~]# quotaon /home  //啓用磁盤配額功能,如需關閉quotaoff
[root@cnode6_8 ~]# edquota jack  //編輯jack的quota限制,此處進入配後有兩個狀態值
                                     是不能修改的分別是blocks和inodes 本別表示當前系統
                                     使用了多少k(此處的blocks是以kb爲單位!切記)和使用
                                     了多少iNode,iNodes設置爲0 0表示沒有設置iNode限制
[root@cnode6_8 ~]# edquota -p jack rose //可以使用jack爲模板爲rose設置quota,也可以使用setquota 加用戶名設置
 [root@cnode6_8 ~]# setquota user1 100000 200000 0 0 /home
[root@cnode6_8 ~]# quota jack  //查看jack的quota設置
Disk quotas for user jack (uid 500):
 Filesystem  blocks quota  limit  grace   files  quota   limit   grace
/dev/sdb2   40   50000  100000  11     0    0       
[root@cnode6_8 ~]# repquota /home  //查看/home分區設置的用戶磁盤限制
*** Report for user quotas on device /dev/sdb2
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User  used    soft    hard   grace  used  soft  hard  grace
----------------------------------------------------------------------
root  --        4        0     0    1    0    0      
jack   --       40       50000  100000    11   0    0      
rose   --       32        50000  100000   8    0    0      
user1 --       32        100000  200000    8    0    0      
[root@cnode6_8 ~]# su - jack
[jack@cnode6_8 ~]$ cd /home/home //進入jack家目錄做測試
 [jack@cnode6_8 ~]$ dd if=/dev/zero of=jack_zero bs=1M count=50
sdb2: warning, user block quota exceeded.  //超過50M報警
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 1.22038 s, 43.0 MB/s
[jack@cnode6_8 ~]$ dd if=/dev/zero of=jack_zero2 bs=1M count=50
sdb2: write failed, user block limit reached.  //再次創建50M提示失敗
dd: writing `jack_zero2': Disk quota exceeded
48+0 records in
47+0 records out
49930240 bytes (50 MB) copied, 0.685798 s, 72.8 MB/s
[jack@cnode6_8 ~]$ quota jack  //查看jack的quota,寬限期已經變爲6天
Disk quotas for user jack (uid 500):
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
 /dev/sdb2  100000*  50000  100000   6days      13       0       0       
[jack@cnode6_8 ~]$ du -sh  //jack的家目錄一共有的數據
98M   .


或許在linux磁盤管理上面這只是冰山一角,需要你我共同努力!



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