《Linux命令、编辑器与Shell编程》读书笔记6-磁盘和文件系统管理

一、磁盘及分区管理

【查看磁盘设备列表fdisk -l】

fdisk -l

Disk/dev/sda: 42.9 GB, 42949672960 bytes

255heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x000865ac

Device            Boot              Start              End               Blocks           Id     System

/dev/sda1                            2048              4208639         2103296         82    Linux swap / Solaris

/dev/sda2              *             4208640  83886079              39838720              83    Linux

 

Disk/dev/sdb: 85.9 GB, 85899345920 bytes

255heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x00000000

Disk/dev/sdb doesn't contain a valid partition table

第一部分是/dev/sda盘的硬件信息,标识了磁头数(255 heads),扇区数(63 sectors),柱面数(5221 cylinders),根据这些数据,就可以计算出一块磁盘的容量。

(这里涉及到磁盘的硬件结构,具体内容请百度百科)

下面的/dev/sda1和/dev/sda2,表示这块磁盘被分成了两个分区,后面的System列表示了这两个分区的分区类型。

再接下来,还存在一块硬盘/dev/sdb,这里只标示了它的总容量,表示它还没有被格式化分区。

*在Linux系统中,所有的设备都放在/dev目录下,sd开头的表示SCSI硬盘、SATA硬盘或U盘等设备;hd通常表示IDE硬盘,fd表示软驱,hdc或cdrom表示光盘。

【查看磁盘设备hdparm】

hdparm命令主要用于查看IDE硬盘的工作参数,还可以设置IDE硬盘的工作模式。由于IDE硬盘逐渐被淘汰,这里直说目前还有用的参数选项。

【命令格式】

hdparm[option] device_name

【OPTION】

I:显示硬件信息

t:评估硬盘从缓冲区读取数据的速度

T:评估硬盘从快速缓存中读取数据的速度

 

【磁盘分区fdisk】

【基本概念】

主分区:每个硬盘最多可以有4个可用的主分区;一般使用编号1~4,比如sda1,sda2…

扩展分区:特殊的主分区(它会占用一个主分区)。要使用扩展分区,必须先将扩展分区划分为可以直接挂在并存取数据的逻辑分区。

逻辑分区:从扩展分区划分出来的一类分区。逻辑分区可以直接挂在并存取数据,以个扩展分区可以被划分为多个逻辑分区。从编号5开始(即使前面没有sda4,也从5开始,这也是识别逻辑分区的一种方法)

【分区命令fdisk】

对想要分区的硬盘输入分区命令后:

fdisk /dev/sdb

#输入m会列出可用的操作选项

Command(m for help): m

Commandaction

   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

   x  extra functionality (experts only)

d:删除分区

l:查看分区类型列表

n:添加新分区

p:打印当前分区信息,也就是把当前的挂载点信息输出

q:不保存已执行的选项并退出

t:修改分区类型

v:验证分区类型

w:保存当前操作并退出;执行后会把硬盘上的数据清空

【举例】

对/dev/sdb进行分区,分为两个主分区,第一个sdb1位主分区,40GB;剩余空间划到主分区2,并将其划分成扩展分区,最后将这个扩展分区全部变成逻辑分区sdb5。下面是实际操作过程,蓝色为手动输入项:

# fdisk /dev/sdb

Devicecontains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Buildinga new DOS disklabel with disk identifier 0x39dabbc4.

Changeswill remain in memory only, until you decide to write them.

Afterthat, of course, the previous content won't be recoverable.

 

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

 

#先查看一下sdb的基本情况,使用选项p

Command(m for help): p

 

Disk/dev/sdb: 85.9 GB, 85899345920 bytes

255heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x39dabbc4

 

   Device Boot      Start         End      Blocks  Id  System

 

#新建一个分区

Command(m for help): n

Commandaction

   e  extended

   p  primary partition (1-4)

#输入p建立主分区

p

#输入主分区号,1~4分别代表sdb1~sdb4

Partitionnumber (1-4, default 1): 1

#下面要求输入该分区的起始柱面,直接按回车选默认值

Firstsector (2048-167772159, default 2048):

Usingdefault value 2048

#下面是输入该分区的结束柱面、以确定该分区的大小,按要求直接输入+40G即可

Lastsector, +sectors or +size{K,M,G} (2048-167772159, default 167772159): +40G

 

#输入n继续新建分区

Command(m for help): n

Commandaction

   e  extended

   p  primary partition (1-4)

#输入e新建一个扩展分区

e

#输入这个扩展分区的分区号,因为扩展分区要占用一个主分区,所以号码也是从1~4里选,1已经被占用了,这里选2

Partitionnumber (1-4, default 2): 2

#下面仍然是确定该分区的大小

Firstsector (83888128-167772159, default 83888128):

Usingdefault value 83888128

Lastsector, +sectors or +size{K,M,G} (83888128-167772159, default 167772159):

Usingdefault value 167772159

 

#继续新建分区

Command(m for help): n

Commandaction

   l  logical (5 or over)

   p  primary partition (1-4)

#因为上面已经建好了一个扩展分区,这里会新出现一个l选项,可以新建逻辑分区

l

#下面是确定这个逻辑分区的容量

Firstsector (83890176-167772159, default 83890176):

Usingdefault value 83890176

Lastsector, +sectors or +size{K,M,G} (83890176-167772159, default 167772159):

Usingdefault value 167772159

 

#至此,上面的操作被保存到缓存中了,仍然使用选项p查看

Command(m for help): p

 

Disk/dev/sdb: 85.9 GB, 85899345920 bytes

255heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0x39dabbc4

#输出即将要分区的信息、以便确认

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1            2048    83888127   41943040   83  Linux

/dev/sdb2        83888128   167772159   41942016    5  Extended

/dev/sdb5        83890176   167772159   41940992   83  Linux

#确认无误后,输入选项w

Command(m for help): w

#给出分区成功的提示信息

Thepartition table has been altered!

Callingioctl() to re-read partition table.

Syncingdisks.

【为分区创建文件系统mkfs】

执行该命令相当于格式化磁盘,注意备份数据。

分区完成后、还不能直接使用,需要为分区指定文件系统,常见的文件系统有ext2, ext3(最常用), ext4, XFS, ReiserFS(常用于代理服务器或邮件服务器),JFS(企业级文件系统), NFS(常用于远程网络存储)

【命令格式】

mkfs[option] device_name

【OPTION】

t:指定要创建的文件系统类型,比如:-t ext3

L:创建文件系统的同时,为其添加卷标

c:创建前检查该分区是否有坏道

*所谓的卷标,和Windows概念一样,就是给这个分区起个名字

比如要将刚刚创建的/dev/sdb1划分为ext3文件系统,并指定卷标为/add:

# mkfs -t ext3 -L /add /dev/sdb1

【查看、修改卷标e2label】

【查看卷标】

e2label /dev/sdb1

【修改卷标】

e2label /dev/sdb1 new_labelname

 

【挂载文件系统mount】

【命令格式】

mount[option] device target_directory

【OPTION】

a:挂在所有可以挂载的文件系统,如果不指定,则挂在/etc/fstab中列出的文件系统

o:制定挂载时使用的参数,可用参数如下:


t:制定文件系统的类型,如果挂载的是常见的文件系统,一般不必指定;只有光盘和远程文件系统需要制定

 

【举例】

#将刚刚创建的/dev/sdb1挂载到/add目录

mkdir /add

mount /dev/sdb1 /add

#直接使用mount命令查看已挂载的文件系统

mount

/dev/sda2on / type ext3 (rw,acl,user_xattr)

procon /proc type proc (rw)

sysfson /sys type sysfs (rw)

debugfson /sys/kernel/debug type debugfs (rw)

udevon /dev type tmpfs (rw,mode=0755)

tmpfson /dev/shm type tmpfs (rw,mode=1777)

devptson /dev/pts type devpts (rw,mode=0620,gid=5)

fusectlon /sys/fs/fuse/connections type fusectl (rw)

vmware-vmblockon /var/run/vmblock-fuse type fuse.vmware-vmblock(rw,nosuid,nodev,default_permissions,allow_other)

/dev/sdb1on /add type ext3 (rw)

#如果插入的U盘不是常见的文件系统,那么挂载时还需要制定文件系统类型

mount –t ext3 /dev/sde1 /media

【卸载文件系统umount】

将刚刚挂载到/add的硬盘/dev/sdb1卸载:

umount /dev/sdb1

 

【自动挂载文件-fstab列表】

该文件位于/etc/fstab,凡是列在表中的文件系统,在启动时都会自动挂载到系统中

文件内容示意如下:

/dev/sda1            swap                 swap       defaults              0 0

/dev/sda2            /                    ext3       acl,user_xattr        1 1

proc                 /proc                proc       defaults              0 0

sysfs                /sys                 sysfs      noauto                0 0

debugfs              /sys/kernel/debug    debugfs   noauto                0 0

usbfs                /proc/bus/usb        usbfs      noauto                0 0

devpts               /dev/pts             devpts     mode=0620,gid=5       0 0

【文件说明】

第一列:要挂在的文件系统;如果这个分区有卷标,也可以用LABEL=label_name的形式书写,这样的好处是即使文件系统盘符发生变化(更换硬件接口或者添加新硬盘时都有可能发生这种事),Linux也可以通过卷标名成功挂载分区而不会报错;

第二列:挂载点,这个目录必须事先存在;

第三列:文件系统格式;

第四列:挂载参数,即mount命令中o下面的参数;

第五列:是否需要备份,0表示不需要,1为需要;一般会把/根分区设为1;

第六列:自检顺序,一般根分区为1,其他分区为2,0表示不检测。

【注意事项】

*如果挂载点目录中存在数据,需要先将其中的数据拷贝到其他目录,否则挂载成功后,原目录的数据就看不到了;

*处于安全考虑,尽量不要讲光盘、U盘设备添加到这个目录中,最好手动加载。(类似于Windows中禁止U盘自动运行,一个道理)

*如果要取出物理硬盘,一定要先使用umount卸载分区并从fstab列表中删除这一行记录,以防Linux启动时报错

 

二、RAID设备

百度百科上有详细的介绍,这里简单说下:

1.RAID 0:注重读写速度,不提供数据冗余备份功能;

2.RAID 1:和RAID 0相反,提供了冗余功能,但读写速度不变、甚至有可能略有降低;

3.无论阵列级别是多少,组成阵列的每个磁盘容量应大致相等;型号、品牌也最好相同;

4.RAID 5至少需要使用3块以上磁盘,可用空间计算公式为n*(m-1),n是每个磁盘的容量,m是硬盘数。这种级别的RAID扩展性良好,但容错性一般,如果损坏盘大于1,则部分甚至全部数据将不可恢复。

5. 最容易犯的错误:用同一个物理硬盘的不同分区创建RAID,这样虽然能创建成功,但读写性能反而会大大降低。

【创建RAID 5示范】

假设主板已连接了三块硬盘,分别为/dev/sdb,/dev/sdc,/dev/sdd,如下:

Disk/dev/sdd: 5368 MB, 5368709120 bytes

Disk/dev/sdc: 5368 MB, 5368709120 bytes

Disk/dev/sdb: 5368 MB, 5368709120 bytes

 

用这三块硬盘创建RAID 5的步骤如下

1. 为硬盘分区

fdisk /dev/sdb

Devicecontains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Buildinga new DOS disklabel with disk identifier 0xe45e3969.

Changeswill remain in memory only, until you decide to write them.

Afterthat, of course, the previous content won't be recoverable.

 

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

 

Command(m for help): n

Commandaction

   e  extended

   p  primary partition (1-4)

p

Partitionnumber (1-4, default 1): 1

Firstsector (2048-10485759, default 2048):

Usingdefault value 2048

Lastsector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):

Usingdefault value 10485759

#下面的参数t是用来修改分区类型

Command(m for help): t

Selectedpartition 1

#将分区改为系统级raid(软raid)文件类型--fd类型;ext3类型也可以、但在建RAID时极不常用

Hexcode (type L to list codes): fd

Changedsystem type of partition 1 to fd (Linux raid autodetect)

 

Command(m for help): p

Disk/dev/sdb: 5368 MB, 5368709120 bytes

255heads, 63 sectors/track, 652 cylinders, total 10485760 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 512 bytes / 512 bytes

Diskidentifier: 0xe45e3969

DeviceBoot      Start         End      Blocks  Id  System

/dev/sdb1            2048    10485759    5241856   fd  Linux raid autodetect

 

Command(m for help): w

Thepartition table has been altered!

Callingioctl() to re-read partition table.

Syncingdisks.

以此再把/dev/sdc、/dev/sdd分区

操作完成后的分区如下:

DeviceBoot    Start              End               Blocks           Id     System

/dev/sdd1              2048    10485759    5241856         fd     Linux raid autodetect

/dev/sdc1              2048    10485759    5241856         fd     Linux raid autodetect

/dev/sdb1              2048    10485759    5241856         fd     Linux raid autodetect

 

2. 创建阵列

#使用mdadm命令创建RAID

#选项create表示要创建的RAID设备名(即挂载点名称),这里命名为/dev/md0

#选项level表示RAID级别,本例中是5(即RAID5)

#选项raid-devices表示RAID将使用的分区数,本例中是3

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1/dev/sdc1 /dev/sdd1

mdadm: Defaulting to version 1.2metadata

mdadm: array /dev/md0 started.

 

RAID创建完成后,系统会立即同步磁盘,并初始化创建的RAID,进度可以通过下面命令查看:

cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]

md0 : active raid5 sdd1[3] sdc1[1]sdb1[0]

     10474496 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]

     [===================>.] recovery = 99.3%(5203924/5237248) finish=0.0min speed=25296K/sec

unuseddevices: <none>

这时不要硬盘进行读写操作。

 

3. 写入配置文件

以便系统每次重启能够自动启动raid:

#如果是第一次创建RAID,下面的配置文件mdadm.conf可能不存在,需要手动创建

echo "DEVICE /dev/sdb1 /dev/sdc1/dev/sdd1">>/etc/mdadm.conf

#再通过detail和scan命令扫描RAID, 将详细信息写入配置文件,注意要用追加的方式

mdadm --detail --scan>>/etc/mdadm.conf

自动生成的/etc/mdadm.conf文件格式有可能不正确,需要查看man mdadm.conf根据其中给出的实例进行修改

 

*注:执行到这一步时最好重启一下linux,看下/dev/md0是否还存在,否则需要根据实际情况更改mdadm命令后面的参数、重新创建RAID

*下面就可以把这个新建的/dev/md0当成“普通的”分区去操作了

4. 格式化RAID分区

#格式为ext3分区

mkfs.ext3 /dev/md0

#下面是输出信息

mke2fs1.41.9 (22-Aug-2009)

Filesystemlabel=

OStype: Linux

Blocksize=4096 (log=2)

Fragmentsize=4096 (log=2)

655360inodes, 2618624 blocks

130931blocks (5.00%) reserved for the super user

Firstdata block=0

Maximumfilesystem blocks=2684354560

80block groups

32768blocks per group, 32768 fragments per group

8192inodes per group

Superblockbackups stored on blocks:

        32768, 98304, 163840, 229376, 294912,819200, 884736, 1605632

 

Writinginode tables: done

Creatingjournal (32768 blocks): done

Writingsuperblocks and filesystem accounting information: done

 

Thisfilesystem will be automatically checked every 27 mounts or

180days, whichever comes first.  Use tune2fs-c or -i to override.

 

5. 使用fdisk对新建raid分区

fdisk /dev/md0

与上面类似,以此输入n, p, 1, 回车, 回车, p, w

分区完成后:

fdisk –l

Disk/dev/md0p1: 10.7 GB, 10725883904 bytes

2heads, 4 sectors/track, 2618624 cylinders, total 20948992 sectors

Units= sectors of 1 * 512 = 512 bytes

Sectorsize (logical/physical): 512 bytes / 512 bytes

I/Osize (minimum/optimal): 524288 bytes / 1048576 bytes

Diskidentifier: 0x640e04bc

    Device Boot      Start         End      Blocks  Id  System

/dev/md0p1       2048    20948991   10473472   83  Linux

6. 挂载RAID

mkdir /raid

mount /dev/md0p1 /raid/

 

df –h

Filesystem      Size Used Avail Use% Mounted on

/dev/sda2        38G  16G   21G  43% /

udev            2.0G  160K 2.0G   1% /dev

tmpfs           2.0G   72K 2.0G   1% /dev/shm

/dev/md0p1    9.9G 151M  9.2G   2% /raid

7. 将下面内容追加到/etc/fstab以便每次启动时都能自动挂载新建RAID

/dev/md0p1     /raid ext3 defaults   0     0

【为阵列添加热备盘】

1. 先查看已有RAID的状态

mdadm--detail /dev/md0

/dev/md0:

        Version : 1.2

  Creation Time : Sat Dec 12 08:15:21 2015

     Raid Level : raid5

     Array Size : 10474496 (9.99 GiB 10.73 GB)

  Used Dev Size : 5237248 (4.99 GiB 5.36 GB)

   Raid Devices : 3

  Total Devices : 3

    Persistence : Superblock is persistent

    Update Time : Sat Dec 12 08:43:18 2015

          State : active

Active Devices : 3

Working Devices : 3

 Failed Devices : 0

  Spare Devices : 0

         Layout : left-symmetric

     Chunk Size : 512K

           Name : linux-xk:0  (local to host linux-xk)

           UUID :dd071836:301a4153:7f6edd95:d9801690

         Events : 18

    Number  Major   Minor   RaidDevice State

       0      8       17        0     active sync   /dev/sdb1

       1       8      33        1      active sync   /dev/sdc1

       3       8      49        2      active sync   /dev/sdd1

上面标蓝的字段要着重查看

2. 连接新硬盘至Linux并为新硬盘分区

3. 添加热备硬盘

假设新增的硬盘分区为/dev/sde1

mdadm/dev/md0 --add /dev/sde1

4. 移除坏盘

这里假设/dev/sdb1损坏(可以使用命令:mdadm –f /dev/md0 /dev/sdb1)

这时查看/proc/mdstat文件,可以看到/dev/sdb1已经损坏并正在修复数据(也就是启用刚刚新增的sde1),等待数据修复完成。

移除坏盘:

mdadm/dev/md0 –remove /dev/sdb1

【扩展阵列】

假设要将/dev/sde1添加到已有的RAID中:

先要将sde1添加为热备盘(命令如上)

之后使用--grow选项

mdadm--grow /dev/md0 --raid-devices 4

系统会提示:

mdadm:Need to backup 3072K of critical section..

查看/proc/mdstat文件中的进度显示,等待扩容完成即可

 

【备注】

重启后RAID丢失的问题仍没有解决,我的LINUX内核版本号为:

cat /proc/version

Linux version 3.0.76-0.11-default (geeko@buildhost) (gcc version4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux) ) #1 SMP Fri Jun 1408:21:43 UTC    2013 (ccab990)

mdadm.conf文件内容:

cat /etc/mdadm.conf

DEVICE/dev/sdb1 /dev/sdc1 /dev/sdd1

ARRAY/dev/md/0  metadata=1.2 UUID=865a64bb:738d9832:996d4580:ad743790name=linux-xk:0

三、LVM逻辑卷管理

大概意思就是:这种技术可以将多个不同容量的分区合并在一起然后重新分配使用空间;支持在线增减硬盘、在线扩充文件系统

【基本概念】

·物理卷(PV):就是硬件设备的分区、RAID等,是构成LVM的基本存储设备

·卷组(VG):由一个或多个PV组成,可以理解成为分区的“磁盘”

·逻辑卷(LV):可以理解成卷组中的一个分区,它上面可以被挂载、可以创建文件。

·物理块(PE):它的功能类似于硬盘的扇区

·逻辑块(LE):由于一个LV可能位于多个PV上,所以在寻址时就不能按照扇区寻址,而是将LV划分成多个LE,LE时LV上可寻址的最小存储单元。一个LE对应一个PE。

·卷组描述符区域(VGDA):它类似于分区的分区表,处于PE的起始处,它记录了LE与PE的映射关系

【创建LVM】

假设系统存在两块硬盘/dev/sdb和/dev/sdc,以这两个硬盘位基础创建一个LVM。

【创建物理卷PV】

1. 将硬盘分区为8e

#fdisk /dev/sdb

以此选择n,p,1,t,1,8e,p(这里要确认下打印出来的分区信息),w

#fdisk /dev/sdc

以此选择n,p,1,t,1,8e,p(这里要确认下打印出来的分区信息),w

 

2. 初始化物理卷

#pvcreate /dev/sdb1 /dev/sdc1

【创建卷组VG】

【命令格式】

vgcreate <卷组名><pv列表,多个pv用空格分割>

假设要创建的VG名为LVM01_VG:

vgcreate LVM01_VG /dev/sdb1 /dev/sdc1

查看创建好的卷组

vgdisplay -v LVM01_VG

【创建LVM】

LVM按照写入方式的不同,分两种模式:

·线性模式:先写满第一个PV,再写第二个PV,一次类推

·交错模式:交错的将数据均匀写入每个PV中,这种方式读写速度要快,可一旦出现故障、恢复数据比较困难。

【新建线性模式LVM】

在刚新建好的卷组LVM01_VG上,新建一个名为lv_file的线性模式LVM:

lvcreate -L 5.9G -n lv_file LVM01_VG

-L用来指定LVM的容量,-n指定LVM的名称,这里命名为lv_file;最后的LVM01_VG是上面建好的VG名

【新建交错模式LVM】

#创建交错模式的LVM,命名为lv_cross

lvcreate -i 2 -I 4 -l 100 -n lv_cross LVM01_VG

-i:交错值,这里是2

-I:LVM的块大小,这里为4MB

-l:(小写L)块数量,这里是100,因此这个LVM大小为400MB

-n:这个LVM的名字

LVM01_VG是上面建好的VG名

【查看LVM】

*新建的LVM位于/dev下面,文件夹名就是VG的名字,设备名就是-n指定的名字

lvdisplay -v /dev/LVM01_VG/ lv_cross

【使用LVM】

1.为LVM创建文件系统

mkfs.ext3 /dev/LVM01_VG/lv_cross

2.挂载

mkdir /lvm1

mount /dev/LVM01_VG/lv_cross /lvm1/

3.追加/etc/fstab

/dev/LVM01_VG/lv_cross       /lvm1/ ext3    defaults        0      0

【扩充LVM】

【添加PV】

假设要想上面的LVM01_VG中添加一个PV:/dev/sdd

*物理硬盘连接好后、需要执行:

echo "- - -" >  /sys/class/scsi_host/host0/scan

新增的硬盘就会被立刻识别出来(仅限SCSI硬盘)

1.将/dev/sdd做为8e分区

2.初始化/dev/sdd1:

pvcreate /dev/sdd1

3.将/dev/sdd1加到卷组LVM01_VG中:

vgextend LVM01_VG /dev/sdd1

4.查看添加是否成功:

vgdisplay -v LVM01_VG

  --- Physical volumes ---

  PV Name               /dev/sdb1

  PV UUID              gbb0nV-0eJ2-mY7g-0X0D-oUh4-54IO-k2yAF6

  PV Status             allocatable

  Total PE / Free PE    767 / 717

 

  PV Name               /dev/sdc1

  PV UUID              N4Uhuy-HZM2-ZHqj-5lxF-B0vU-Hqkr-71Um3Y

  PV Status             allocatable

  Total PE / Free PE    767 / 717

 

  PV Name               /dev/sdd1

  PV UUID              pqGGX3-KdWu-wtew-6SwC-4uqp-gRii-9b8Oko

  PV Status             allocatable

  Total PE / Free PE    767 / 767

【扩充LVM】

在原有大小基础上、为上面的/dev/LVM01_VG/lv_cross增加2G的容量:

lvextend -L +2G /dev/LVM01_VG/lv_cross

  Using stripesize of last segment 4.00 KiB

  Extending logical volume lv_cross to 2.39 GiB

  Logical volume lv_cross successfully resized

将/dev/LVM01_VG/lv_cross扩充到4G的容量

lvextend -L 4G /dev/LVM01_VG/lv_cross

  Using stripesize of last segment 4.00 KiB

  Extending logical volume lv_cross to 4.00 GiB

  Logical volume lv_cross successfully resized

【在线扩充文件系统】

到上面为止,虽然LVM的容量增加,但如果使用df -h查看的话,容量还是没有变化的,需要在线扩充文件系统至4G:

resize2fs /dev/LVM01_VG/lv_cross4G

resize2fs 1.41.9 (22-Aug-2009)

Filesystem at /dev/LVM01_VG/lv_cross ismounted on /lvm1; on-line resizing required

old desc_blocks = 2, new_desc_blocks = 16

Performing an on-line resize of/dev/LVM01_VG/lv_cross to 4194304 (1k) blocks.

The filesystem on /dev/LVM01_VG/lv_cross isnow 4194304 blocks long.

*注意:这个命令只对ext2和ext3文件系统有效,其他文件系统需要查看对应的帮助文档.在线扩充不会覆盖原有的文件

【减小LVM】

1. 这个过程涉及数据转移和文件信息修改,所以不能在线进行,先卸载:

umount /lvm1/

2. 使用fsck -f强制检查文件系统中的错误并修复:

fsck -f /dev/LVM01_VG/lv_cross

fsck from util-linux 2.19.1

e2fsck 1.41.9 (22-Aug-2009)

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

/dev/mapper/LVM01_VG-lv_cross: 12/1310720files (0.0% non-contiguous), 176986/5242880 blocks

如果数据很多,这一步耗时会很多。

3. 使用resize2fs将这个LVM的文件系统容量减小至1G:

resize2fs /dev/LVM01_VG/lv_cross 1G

resize2fs 1.41.9 (22-Aug-2009)

Resizing the filesystem on/dev/LVM01_VG/lv_cross to 1048576 (1k) blocks.

The filesystem on /dev/LVM01_VG/lv_cross isnow 1048576 blocks long.

*注意:减小后的容量要保证大于其中存放的数据大小,否则会有数据丢失。

*如果数据较多,这个命令也很费时。

4. 减小LVM:

lvreduce -L 1G/dev/LVM01_VG/lv_cross

 WARNING: Reducing active logical volume to 1.00 GiB

 THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce lv_cross?[y/n]: y

 Reducing logical volume lv_cross to 1.00 GiB

 Logical volume lv_cross successfully resized

5.重新挂载:

mount /dev/LVM01_VG/lv_cross /lvm1/

这时查看操作后的LVM:

df -h

Filesystem                     Size Used Avail Use% Mounted on

/dev/sda2                       28G  6.2G  21G  24% /

udev                           2.0G  116K 2.0G   1% /dev

tmpfs                          2.0G  4.0K 2.0G   1% /dev/shm

/dev/mapper/LVM01_VG-lv_cross  992M   11M  930M   2% /lvm1

【移动数据并移除PV】

假设要更换新硬盘,则需要将旧盘中的数据移动到其他PV上、然后移除。这里假设,我们要将上面/dev/LVM01_VG/lv_cross中的/dev/sdb1移除。

1.检查物理卷(PV)中物理快(PE)的分配情况,这个命令可以查看每个PV的PE使用情况:

pvdisplay -m

  --- Physical volume ---

  PV Name               /dev/sdb1

  VG Name               LVM01_VG

  PV Size               3.00 GiB / not usable 3.00 MiB

  Allocatable           yes

  PE Size               4.00 MiB

  Total PE              767

  Free PE               639

  Allocated PE          128

  PV UUID               gbb0nV-0eJ2-mY7g-0X0D-oUh4-54IO-k2yAF6

 

  --- Physical Segments ---

  Physical extent 0 to 127:

    Logical volume      /dev/LVM01_VG/lv_cross

    Logical extents     0 to 255

  Physical extent 128 to 766:

    FREE

 

  --- Physical volume ---

  PV Name               /dev/sdc1

  VG Name               LVM01_VG

  PV Size               3.00 GiB / not usable 3.00 MiB

  Allocatable           yes

  PE Size               4.00 MiB

  Total PE              767

  Free PE               639

  Allocated PE          128

  PV UUID               N4Uhuy-HZM2-ZHqj-5lxF-B0vU-Hqkr-71Um3Y

  --- Physical Segments ---

  Physical extent 0 to 127:

    Logical volume      /dev/LVM01_VG/lv_cross

    Logical extents     0 to 255

  Physical extent 128 to 766:

    FREE

 

  --- Physical volume ---

  PV Name               /dev/sdd1

  VG Name               LVM01_VG

  PV Size               3.00 GiB / not usable 3.00 MiB

  Allocatable           yes

  PE Size               4.00 MiB

  Total PE              767

  Free PE               767

  Allocated PE          0

  PV UUID              pqGGX3-KdWu-wtew-6SwC-4uqp-gRii-9b8Oko

 

  --- Physical Segments ---

  Physical extent 0 to 766:

    FREE

重点关注Total PEFree PEAllocated PE这三个字段,原则是:

要移除的PV上的Allocated PE要大于目标PV设备(要将数据转移上去的硬盘)的Free PE

可以看出,/dev/sdd1和/dev/sdc1都符合转移条件

2.移动数据:

pvmove /dev/sdb1 /dev/sdd1

  /dev/sdb1: Moved: 0.8%

  /dev/sdb1: Moved: 100.0%

或者使用:

pvmove -i 10 /dev/sdb1

这个命令将有系统自己决定把数据移动到哪个PV。

3.移除PV

vgreduce LVM01_VG /dev/sdb1

  Removed "/dev/sdb1" from volumegroup "LVM01_VG"

【LVM快照】

1.该操作主要针对数据库所在的LVM。由于数据库文件内容随时有变化,所有热备份数据库时可能会由于相关联的数据前后不一致而导致备份出来的文件没有意义。而快照操作则可以把数据库所在的LVM进行“照相”、之后我们在对这个“照片”里的数据库文件进行备份,就能保证数据的一致性了。

lvcreate -L 2G -s -n lvm_snap /dev/LVM01_VG/lv_cross

  Logical volume "lvm_snap" created

挂载快照LVM:

mkdir /lvm_snap

mount /dev/LVM01_VG/lvm_snap /lvm_snap/

df-h

Filesystem                     Size  Used Avail Use% Mounted on

/dev/sda2                       28G  6.2G  21G  24% /

udev                           2.0G  128K 2.0G   1% /dev

tmpfs                          2.0G  4.0K 2.0G   1% /dev/shm

/dev/mapper/LVM01_VG-lv_cross  992M  11M  930M   2% /lvm1

/dev/mapper/LVM01_VG-lvm_snap 992M   11M  930M  2% /lvm_snap

这是就可以对快照文件进行后续操作了

2.完成备份后、需要卸载并删除快照LVM:

umount /dev/mapper/LVM01_VG-lvm_snap

lvremove /dev/LVM01_VG/lvm_snap

Doyou really want to remove active logical volume lvm_snap? [y/n]: y

  Logical volume "lvm_snap"successfully removed

【彻底移除LVM】

该操作会丢失该LVM上的所有数据,操作前要谨慎:

lvremove /dev/LVM01_VG/lv_cross

四、磁盘配额管理

【为磁盘配额提供支持】

要开启配额管理,需要使硬盘支持此功能:

打开/etc/fstab文件,在要配置此功能的硬盘的第四列上加上usrquota,grpquota,如下:

/dev/sdb1       /quot/     ext3   defaults,usrquota,grpquota     0       0

修改完成后,重新挂载该分区。

之后用mount命令查看是否生效:

/dev/sdb1on /quot type ext3 (rw,usrquota,grpquota)

【检查磁盘配额】

quotacheck  [OPTION] filesystem

[OPTION]

c:跳过原有配额文件,只执行新的扫描并保存结果到对应磁盘

v:显示命令详细信息

u:检查用户使用文件系统的情况

g:检查用户组使用文件系统的情况

quotacheck  -cug  /dev/sdb1

ls-l /dev/sdb1

-rw-------  1 root root 6144 Dec 18 20:58  aquota.group

-rw-------  1 root root 6144 Dec 18 20:58  aquota.user

这两个文件就是保存用户(组)的磁盘配额信息,以及文件系统的使用情况和配置信息。

【查看磁盘使用情况repquota】

repquota/quot

***Report for user quotas on device /dev/sdb1

Blockgrace time: 7days; Inode grace time: 7days

                        Block limits                File limits

User            used    soft   hard  grace    used soft  hard  grace

----------------------------------------------------------------------

root      --  70212       0       0              5     0    0

【建立磁盘配额】

edquota [option]  [username|groupname]

【OPTION】

u:指定限制的用户名称

g:指定限制的用户组名称

p:复制用户(组)的配额信息

t:修改过渡期,即用户配额超过限制后的宽限时间

【举例】

为用户xk配置

edquota -u  xk

此时会进入一个文本模式的配置界面:

Diskquotas for user xk (uid 1000):

  Filesystem blocks     soft  hard      inodes    soft         hard

  /dev/sdb1    0            0     0           0            0            0

解释:

blocks:单位KB,当前用户在这个磁盘已使用的分区空间

soft:单位KB,用户使用磁盘空间或文件数的软限制,在宽限期内、用户的配额可以超过这个限制。

hard:硬限制,单位KB,绝对不能超过的限制

inodes:用户在当前磁盘空间中占用的i结点数,系统自动统计,不必修改。

最后两列的soft和hard表示对该用户文件数的软硬限制,单位是个

上面配置值都是必须是整数。

修改对应的数值,使用:wq保存退出。

查看刚刚的配置:

quota  -u xk

【复制某用户的配额配置给其他用户】

edquota -p xk  -u  user1 user2

将用户xk的磁盘配额配置信息赋给user1和user2

【为用户组配置磁盘配额】

edquota  -g  group_name

【修改宽限期】

edquota  -t

这也会进入一个文本界面:

Graceperiod before enforcing soft limits for users:

Timeunits may be: days, hours, minutes, or seconds

  Filesystem             Block grace period     Inode grace period

  /dev/sdb1                     7days                  7days

Blockgrace period是空间限制的宽限期,Inode grace period是文件数的宽限期。

单位可以使hours, minutes, seconds。

【开启磁盘配额】

用户的磁盘配额修改好之后,还需要执行开启命令才能生效:

#开启磁盘/dev/sdb1上所有用户组(g)和用户(u)的磁盘配额,如果开启成功则显示提示信息(v)

quotaon -vug  /dev/sdb1

#开启所有文件系统的磁盘配额功能

quotaon-av

【关闭磁盘配额】

和quotaon命令的选项含义类似

#关闭磁盘/dev/sdb1上所有用户组(g)和用户(u)的磁盘配额,如果关闭成功则显示提示信息(v)

quotaoff  -vug  /dev/sdb1

#关闭所有文件系统的磁盘配额功能

quotaoff  -av

【管理磁盘配额】

#查看磁盘配额使用情况

repquota  /dev/sdb1

***Report for user quotas on device /dev/sdb1

Blockgrace time: 7days; Inode grace time: 7days

                        Block limits                File limits

User            used   soft    hard  grace   used  soft  hard grace

----------------------------------------------------------------------

root      --  70212       0       0              5     0    0

xk        -+      0       1       2              2     1     2 7days

上面的xk用户,后面有一个-号和一个+号,表示文件容量配额还未超过限制,但文件个数已经超过配额

#查看所有磁盘的配额使用情况repquota  -a

【校准磁盘使用情况】

quotacheck  -cug  /dev/sdb1

有时可能需要用的-f选项强制检查:

quotacheck  -cfug  /dev/sdb1

五、其他文件系统维护命令

1. 查看硬盘使用df

2. 查看文件(夹)大小du  -csh

3. 修复文件系统命令fsck

fsck [OPTION] file_system

【OPTION】

A:扫描/etcfstab中的所有分区

a:自动修复分区中的错误,不询问用户

f:强制扫描

t:指定分区所有的文件系统类型(是ext2,ext3…),不加的话、系统会自动检测

#使用该命令前、尽量先将分区卸载:

umount/dev/sdb1

#然后以只读方式重新挂载、在执行该命令:

mount-o ro,remount /dev/sdb1 /quot

#扫描修复分区

fsck  -a /dev/sdb1

六、排查文件系统故障的一般思路

1. 系统干脆无法启动

无法使用grub引导加载程序,或者根文件系统发生了故障,需要使用光盘引导:

在光盘安装界面输入linux  rescue重新安装grub引导加载程序

2. 系统启动时自动进入救援模式

一般是/etc/fstab损坏、无法挂载分区:

因为救援模式下的分区都是以只读模式挂载的,这是要用:

mount  -o rw,remount /

改变系统挂载方式,才能对/etc/fstab文件进行修复操作

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值