Linux磁盘管理

Posted ssooking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux磁盘管理相关的知识,希望对你有一定的参考价值。

磁盘管理

一. 文件系统挂载

二. 查看磁盘空间

三. 逻辑卷管理

五. 制作镜像文件

六. 磁盘配额

七. 数据打包与压缩

 

磁盘接口IDESCSISATA

文件系统:是一种对物理空间的组织方式,通常在格式化硬盘时创建。它定义了储存文件的方法和数据结构。

WindowsFAT16FAT32 NTFS

Swap:交换分区,大小取决于物理内存和硬盘空间。一般应大于物理内存,但目前不能超过2GB

 

一. 文件系统挂载: mountumount

1mount命令(手动挂载)

语法mount  [选项]  [设备]  [挂载点]     例子:mount  /dev/sdb  /my/usb

功能:将设备挂载到挂载点处,设备是指要挂载的设备名称,挂载点是指文件系统中已经存在的一个目录名。mount命令的选项及其含义见下表。

-t <文件系统>

-o <选项>

Ext4/xfs

Linux目前常用的文件系统

ro

以只读方式挂载

msdos

Ms-dos的文件系统,即FAT16

rw

以读写方式挂载

vfat

FAT32

Remount

重新挂载已挂载的设备

Iso9660

CD-ROM光盘标准文件系统

User

允许一般用户挂载设备

ntfs

NTFS文件系统

nouser

不允许一般用户挂载设备

atuo

自动检测文件系统

codepage=xxx

代码页

swap

交换分区文件系统

iocharset=xxx

字符集

实例4-1  文件系统挂载

第1步:使用fdisk命令查看磁盘的分区情况,主要是看设备(如/dev/sda)与文件系统之间的对应关系

第2步:使用mkdir/mnt/目录下创建挂载点 

第3步:使用mount将设备/dev/sdc1U盘)挂载到/mnt/usb目录下

 

注意:

(1)Linux会将USB设备识别为第一个没有被硬盘占用的SCSI设备,即如果系统中有一块SCSI硬盘的话(sda),USB会被识别为第2SCSI设备,即sdb

2)光盘为/dev/cdrom

 

2umount命令

语法:umount  [选项]  [设备]  [挂载点]      举例: umount /my/usb

注意:

1)卸载时,当前目录不能在挂载点中,既在当前目录是被挂载设备所在目录时,即便没有对该设备读写,也不允许卸载。

2)在使用umount卸载光驱之前,按下光驱的出仓按钮不会有任何反映。如果卸载时提示设备正忙,表明有进程正在用该光驱,用下列方法卸载:

  fuser –m –v /mnt/cdrom     //查看哪个进程正在使用光盘

  fuser –k /mnt/cdrom        //自动杀死占用cdrom的进程

  umount /mnt/cdrom         //重新卸载

 

3/etc/fstab文件(系统启动时挂载)

/etc/fstab文件内容如下:

最后一列:用来指定如何使用fsck检查硬盘。如果为0,不检查;挂载点为/,值为1,其他都不能写1。如何有分区些值大于1,则检查完根分区后,接着按填写的数字从小到大依次检查,相同数字的同时检查。

 

二. 查看磁盘空间:dfdu

1df命令

语法:df  [选项]  [设备或文件名] 

功能:收集或整理当前已经挂载的全部文件系统的一些统计数据。

实例4-2  磁盘空间的查看

其他示例如下:

# df  -i //inode模式来显示磁盘使用情况

# df  -t  ext3 //显示指定类型磁盘

# df  -ia //列出各文件系统的i节点的使用情况

# df  -T //列出文件系统的类型

2dudisk usage)命令

语法:du  [选项]  [Names…]

功能:统计目录(或文件)所占磁盘空间的大小,显示磁盘空间的使用情况

示例如下:

# du  -hs  Names

# du  -ha  Names //文件和目录都显示

# du  -h  --max-depth=1 //输出当前目录下各个子目录所使用的空间

# du | sort  -nr | less //按照空间大小排序

5.3  查看块设备(包括交换分区)的文件系统类型:blkid

语法:blkid  [选项]  [设备名]

功能:显示当前系统中所以已挂载文件系统的类型

 

[root@localhost 桌面]# blkid //列出当前系统中所以已挂载文件系统的类型

/dev/sda2: LABEL="rhel7" UUID="50ce223f-a1c2-4b6c-9288-448cb9ed34e8" TYPE="xfs" 

/dev/sda3: UUID="a7a028b9-1f6f-4261-ab4d-d2333b7de75f" TYPE="ext4" 

/dev/sda4: UUID="5A54CD0554CCE53B" TYPE="ntfs" 

/dev/sda5: LABEL="TOOLS" UUID="997E-50D2" TYPE="vfat" 

/dev/sda6: LABEL="DATA" UUID="E63D-7941" TYPE="vfat" 

/dev/sda7: LABEL="SCHOOL" UUID="0A27A8791083E690" TYPE="ntfs" 

/dev/sda8: UUID="904a2335-0e3c-42d2-bc15-2438cea2c044" TYPE="ext3" 

/dev/sda9: UUID="9f98fd30-78db-475b-b68c-e27ba673bdfc" SEC_TYPE="ext2" TYPE="ext3" 

/dev/sda12: UUID="59a9499f-4e9a-4d44-b152-03a14db6bc33" TYPE="ext3" 

/dev/sda13: UUID="8295c378-3cc4-4503-a754-d37d359170eb" TYPE="swap"

示例如下:

# blkid  /dev/sda1 //查看/dev/sda1设备所采用的文件系统类型

# blkid  -s  UUID  /dev/sda5 //显示指定设备UUID

# blkid  -s  UUID //显示所有设备UUID

# blkid  -s  LABEL  /dev/sda5 //显示指定设备LABEL

# blkid  -s  LABEL //显示所有设备LABEL

# blkid  -s  TYPE //使用TYPE标签,查看所有设备文件系统

# blkid  -o  device //显示所有设备

# blkid  -o  list //以列表方式查看详细信息

5.4  实例:安装硬盘和分区

要求:在当前系统增加一张SCSI硬盘,并在其上划分三个主分区,分区1和分区3的文件系统为ext3,分区2为交换分区。

1:增加硬盘后用ls查看该设备被系统识别为第几块硬盘。

2:使用fdisk建立分区表

语法:

fdisk  [选项]  <磁盘>      //更改分区表

fdisk  [选项]  -l <磁盘>     //列出分区表

fdisk -s  <分区>            //给出分区大小(块数)

功能:分割硬盘工具,查看硬盘分区信息。

 

3:建立文件系统

1)使用mkfs建立文件系统xfs

语法:

Mkfs -t  [fstype]  <分区>   

功能:格式化指定的分区。

#mkfs –t xfs /dev/sdb1          //把该设备格式化成xfs文件系统

# mkfs.ext3  /dev/sda4 //把该设备格式化成ext3文件系统 

# mkfs.ext4  /dev/sda4 //把该设备格式化成ext4文件系统 

# mke2fs  -j  /dev/sda4 //把该设备格式化成ext3文件系统 

# mkfs.reiserfs  /dev/sda4 //把该设备格式化成reiserfs文件系统

# mkfs.vfat  /dev/sda4 //把该设备格式化成fat32文件系统 

# mkfs.msdos  /dev/sda4 //把该设备格式化成fat16文件系统 

# mkdosfs  /dev/sda4 //把该设备格式化成fat16文件系统

 

#mkfs .xfs  –f  /dev/sdb1        //把该设备重新格式化成xfs文件系统

2)使用fsck检查文件系统

语法:

fsck  [选项  [文件系统]   

功能:检查文件系统并尝试修复错误,可同时检查一个或多个文件系统。

文件系统扫描工具有:fsck.ext2fsck.ext3fsck.ext4fsck.xfsfsck.btrfsfsck.msdosfsck.vfatfsck.fatfsck.minixfsck.cramfsfsck.gfs2。最好根据文件系统来调用不同的扫描工具。

# fsck.xfs  -p  /dev/sda8 //扫描并自动修复

注意:一定要把设备umonut后进行,否则会造成文件系统的损坏。

3)测试分区

将建立的文件系统挂载到相应的目录下,看是否能正常工作

 

按同样的方法在分区3建立xfs文件系统

4)使用mkswap创建并激活交换分区

语法:

mkswap  [选项  设备 [大小]   

功能:将磁盘分区或文件设为linux的交换区。

# mkswap  /dev/sda8 //创建此分区为swap交换分区

# swapon  /dev/sda8 //加载交换分区

# swapoff  /dev/sda8 //关闭交换分区

# swapon  -s //列出加载的交换分区

5)配置fstab文件

在fstab文件加入下面几行,让系统在启动时自动加载文件系统

/dev/sdb1   /mnt/web  xfs   defaults 0 2

/dev/sdb3   /mnt/ftp   xfs   defaults 0 2

/dev/sdb2   swap     swap  defaults 0 0

6重新启动系统

如果某个系统出了问题,系统将不能正常启动,而是引导进行救援模式。按下面步骤解决:

①提供root口令,以root身份登录系统

②使用fsck检查并试图修复受损的文件系统

③如果问题依然存在,运行mkfs重新在分区上建立文件系统

④不太幸运的话,可能要使用fdisk重新建立分区表。

 

5.5  逻辑卷管理

5.5.1 逻辑卷管理概述

逻辑卷管理器LVMLogicl Volume Manager),通过使用逻辑卷管理器对硬盘存储设备进行管理,可以实现硬盘空间的动态划分和调整。

5.5.2  逻辑卷管理组成部分

逻辑卷管理由三部分组成:物理卷、卷组、逻辑卷。

物理卷(PV):在逻辑卷管理最底层,可以是实际物理硬盘上的分区,也可以是整个物理硬盘。

卷组(VG):建立在物理卷上,一个卷组中至少包括一个物理卷,在卷组建立后可动态添加物理卷到卷组中。

逻辑卷(LV):建立在卷组之上,卷中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可动态扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

图6-1  逻辑卷管理的组成

5.5.3  实例:在硬盘sda上创建逻辑卷,大小100M,然后把其大小扩展到200M,然后再缩小到150M

1步:首先使用fdisk -lblkid命令确定哪些分区空白

执行fdisk -l命令。下面是笔者电脑上的分区情况,读者一定要根据自己的具体情况判断。

[root@localhost 桌面]# fdisk –l

磁盘 /dev/sda1000.2 GB, 1000204886016 字节,1953525168 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理)512 字节 / 512 字节

I/O 大小(最小/最佳)512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0xf0b1ebb0

 

设备      Boot  Start         End         Blocks    Id  System

/dev/sda1       110318355  1953520064   921600855    f  W95 Ext\'d (LBA)

/dev/sda2        69353472   110313471    20480000   83  Linux

/dev/sda3        28386855    69352604    20482875   83  Linux

/dev/sda4   *          63    28386854    14193396    7  HPFS/NTFS/exFAT

/dev/sda5       110318418   171766979    30724281    b  W95 FAT32

/dev/sda6       171767043   233215604    30724281    b  W95 FAT32

/dev/sda7       233215668   438028289   102406311    7  HPFS/NTFS/exFAT

/dev/sda8       438028353   642840974   102406311   83  Linux

/dev/sda9       642841038  1052450279   204804621   83  Linux

/dev/sda10     1052450343  1462059584   204804621    b  W95 FAT32

/dev/sda11     1462059648  1871668889   204804621    b  W95 FAT32

/dev/sda12     1871668953  1873725209     1028128+  83  Linux

/dev/sda13     1873725273  1875781529     1028128+  82  Linux swap / Solaris

/dev/sda14     1875781593  1953520064    38869236    b  W95 FAT32

执行blkid命令

[root@localhost 桌面]# blkid

/dev/sda2: LABEL="rhel7" UUID="50ce223f-a1c2-4b6c-9288-448cb9ed34e8" TYPE="xfs"

/dev/sda3: UUID="a7a028b9-1f6f-4261-ab4d-d2333b7de75f" TYPE="ext4"

/dev/sda4: UUID="5A54CD0554CCE53B" TYPE="ntfs"

/dev/sda5: LABEL="TOOLS" UUID="997E-50D2" TYPE="vfat"

/dev/sda6: LABEL="DATA" UUID="E63D-7941" TYPE="vfat"

/dev/sda7: LABEL="SCHOOL" UUID="0A27A8791083E690" TYPE="ntfs"

/dev/sda8: UUID="904a2335-0e3c-42d2-bc15-2438cea2c044" TYPE="ext3"

/dev/sda9: UUID="9f98fd30-78db-475b-b68c-e27ba673bdfc" SEC_TYPE="ext2" TYPE="ext3"

/dev/sda12: UUID="59a9499f-4e9a-4d44-b152-03a14db6bc33" TYPE="ext3"

/dev/sda13: UUID="8295c378-3cc4-4503-a754-d37d359170eb" TYPE="swap"

由上可知:/dev/sda10/dev/sda11/dev/sda14是空白分区。

2步:在磁盘分区上建立物理卷

# pvcreate  /dev/sda14 //在已经建立好的分区或硬盘上建立物理卷

  Physical volume "/dev/sda14" successfully created

# pvdisplay | pvs //查看系统中已经创建的物理卷

  PV VG Fmt Attr PSize PFree

  /dev/sda14 lvm2 a-- 37.07g 37.07g

3步:使用物理卷建立卷组

# vgcreate  MYVG  /dev/sda14 //建立卷组,日后可以根据需要添加新的物理卷到已有卷组中

  Volume group "MYVG" successfully created

# vgdisplay | vgs //查看系统中已经创建的卷组

  VG #PV #LV #SN Attr VSize VFree

  MYVG 1 0 0 wz--n-  37.07g 37.07g

4步:在卷组中建立逻辑卷

# lvcreate -L 00M -n mylv1 MYVG //从已有卷组建立逻辑卷,通常只分配部分空间给该逻辑卷

  Logical volume "mylv1" created

# lvdisplay | lvs //查看系统中已经创建的逻辑卷

  LV VG Attr LSize Pool Origin Data%  Move Log Cpy%Sync Convert

  mylv1 MYVG -wi-a----- 100.00m

查看MYVG-mylv1。

[root@localhost 桌面]# fdisk  -l

磁盘 /dev/sda1000.2 GB, 1000204886016 字节,1953525168 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理)512 字节 / 512 字节

I/O 大小(最小/最佳)512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0xf0b1ebb0

 

设备      Boot  Start         End         Blocks    Id  System

/dev/sda1       110318355  1953520064   921600855    f  W95 Ext\'d (LBA)

……

/dev/sda14     1875781593  1953520064    38869236    b  W95 FAT32

 

磁盘 /dev/mapper/MYVG-mylv1104 MB, 104857600 字节,204800 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理)512 字节 / 512 字节

I/O 大小(最小/最佳)512 字节 / 512 字节

5步:在逻辑卷上建立文件系统

[root@localhost 桌面]# mkfs.xfs  /dev/mapper/MYVG-mylv1

mke2fs 1.42.9 (28-Dec-2013)

文件系统标签=

OS type: Linux

块大小=1024 (log=0)

分块大小=1024 (log=0)

Stride=0 blocks, Stripe width=0 blocks

25688 inodes, 102400 blocks

5120 blocks (5.00%) reserved for the super user

第一个数据块=1

Maximum filesystem blocks=67371008

13 block groups

8192 blocks per group, 8192 fragments per group

1976 inodes per group

Superblock backups stored on blocks:

8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成

正在写入inode完成

Creating journal (4096 blocks): 完成

Writing superblocks and filesystem accounting information: 完成

6步:将文件系统挂载到Linux系统的目录树中

[root@localhost 桌面]# mkdir  /mnt/lv

[root@localhost 桌面]# mount  /dev/mapper/MYVG-mylv1  /mnt/lv

[root@localhost 桌面]# df

文件系统 1K- 已用 可用 已用% 挂载点

/dev/sda2 20469760 6099580 14370180 30% /

devtmpfs 928616 0 928616 0% /dev

tmpfs 937488 140 937348 1% /dev/shm

tmpfs 937488 9112 928376 1% /run

tmpfs 937488 0 937488 0% /sys/fs/cgroup

/dev/sda8 99139188 85969004 8033488 92% /opt

/dev/sda12 995544 434568 493188 47% /boot

/dev/sda6 30709264 6854432 23854832 23% /run/media/root/DATA

/dev/loop0 4138442 4138442 0 100% /cdrom/iso

/dev/mapper/MYVG-mylv1 95054 1567 86319 2% /mnt/lv 

[root@localhost 桌面]#

7步:将/dev/mapper/MYVG-mylv1扩展到200M

[root@localhost 桌面]# lvextend  -L  200M  /dev/mapper/MYVG-mylv1

  Extending logical volume mylv1 to 200.00 MiB

  Logical volume mylv1 successfully resized

[root@localhost 桌面]# df

文件系统 1K- 已用 可用 已用% 挂载点

/dev/sda2 20469760 6099580 14370180 30% /

……

/dev/mapper/MYVG-mylv1 95054 1567 86319 2% /mnt/lv

[root@localhost 桌面]# resize2fs  /dev/mapper/MYVG-mylv1   //重新设置xfs文件系统大小

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/mapper/MYVG-mylv1 is mounted on /mnt/lv; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/mapper/MYVG-mylv1 is now 204800 blocks long.

[root@localhost 桌面]# df

文件系统 1K- 已用 可用 已用% 挂载点

/dev/sda2 20469760 6099580 14370180 30% /

……

/dev/mapper/MYVG-mylv1 194466 1567 181807 1% /mnt/lv

[root@localhost 桌面]# ls  /mnt/lv

lost+found

8步:/dev/mapper/MYVG-mylv1缩小到150M

 

# resize2fs  /dev/卷组/逻辑卷名  size[KB,M,G] //先缩小ext2/ext3文件系统大小

# e2fsck  -f  /dev/卷组/逻辑卷名 //再执行上步指令

# lvreduce  -L  size[KB,M,G]  /dev/卷组/逻辑卷名

5.5.4  卷组的拉升与清除LVM

1、扩展卷组

1)创建物理卷

2)扩展卷组

Vgextend  <卷组名>  <物理卷名>

2、清除卷组

1)先卸载逻辑卷

2)删除逻辑卷  (lvremove <逻辑卷名>

3)删除卷组   (vgremove <组名>

4)删除物理卷  (pvremove <物理卷名>

5)删除物理分区

 

5.6  制作镜像文件:dd

dd命令是一个功能强大的copy命令,支持在拷贝文件的过程中转换文件格式,并且支持指定范围的复制。dd命令的各个参数及其功能见表4-15。

共3步:制作、使用磁盘镜像文件

# dd  if=/dev/zero  of=/root/disk.img  bs=1M  count=100 //制作磁盘镜像文件

# mkfs.ext3  /root/disk.img //格式化

# mount  -o  loop  /root/base.img  /mnt/img //挂载镜像文件

 

 

5.7  文件系统的备份与还原:dumprestore

1.dump命令

功能:dump为备份文件系统工具程序,可将目录或整个文件系统备份至指定的设备中。

yum install dump    //安装该工具程序

备份分为10级,0:备份级别为完全备份,1级备份会保存自执行0级备份以来更新过的所有文件;2级备份会保存自执行1级备份以来更新过的所有文件,以此类推。

实例:在硬盘sdbsdb1上创建文件系统ext3,并把其挂载到/mnt/web下,在sdb1上创建一个目录test和一个文件test.txt,然后将其完全备份到/tmp下。过段时间以后,把sdb1上变化的数据进行增量备份

第一步: # dump  -0S  /dev/sdb1         //完整备份/dev/sdb1前统计一下需多大容量

第二步:#dump  -0u  -f  /tmp/boot.dump  /mnt/web  ///dev/sdb1完全备份到/tmp/boot.dump中,并更新/etc/dumpdates数据库文件

第三步:#ls –l /tmp/boot.dump             //查看备份的文件boot.dump的属性

第四步:#cat /etc/dumpdates                 //查看在/etc/dumpdates中备份信息

第五步:#dump –W    

//显示需要备份的文件及最后一次备份的层次、时间与日期假如过段时间,sdb1中增加了新的数据,则进行增量备份

#dump -1u –f  /tmp/boot1.dump  /mnt/web     //只备份完全备份后有变化的文件示例如下:

2.restore命令

示例如下:

# restore  -t  -f  boot.dump //用 restore 观察 dump 后的备份数据内容。-t参数是查看的意思,-f是指定要查看的备份文件。通过以上命令,就可以查看备份文件中备份了哪些文件

# restore  -C  -f  /tmp /boot.dump //比较差异并且还原整个文件系统

# restore  -i  -f  /tmp /boot.dump //如果只是一部分数据丢失了,那么可以使用参数-i通过交互方式来实现文件的选择性还原

    # restore  -r  -f  /tmp /boot.dump //全部还原

 

       

         

 

 

5.8  磁盘配额

5.8.1  相关命令:quotaquotacheckedquotaquotaonquotaoff

quota要使用的命令有两种:一种用于查询功能,包括quotaquotacheckquotastatsrepquotawarnquota;另一种用于编辑quota的内容,包括edquotasetquota

1. quota命令

语法:quota  [-uvsl]  [username]  quota  [-gvsl]  [groupname]

1# quota  -guvs //显示root用户的quota限制值

2# quota  -vs  -u  ztg //显示ztg用户的磁盘配额

 

2. quotacheck命令

语法:quotacheck  [-avug]  [/mount_point]

1# q

以上是关于Linux磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

【Linux命令】磁盘管理(逻辑卷与物理卷)

Linux 下磁盘管理--逻辑卷--LV

20磁盘管理—linux磁盘管理详解(分区)

Linux 磁盘管理

Linux 磁盘管理

Linux磁盘管理(fdisk磁盘管理工具|swap交换分区|LVM逻辑卷管理)