c语言指定分区大小 格式化分区,文件系统——格式化分区

本章节用到的命令主要有:mkfs,mke2fs,tune2fs,blkid,e2label,bc

一、mkfs命令

前文中介绍了如何给磁盘分区,那么分好了区的磁盘,如何使用呢?首先需要对分区进行格式化。格式化分区非常重要,它是用来创建文件系统的,其命令为mkfs,意为make file system。

创建文件系统时需要指定具体的类型,故mkfs命令可以与-t选项结合使用,其格式为:

mkfs -t FileSystemType /dev/part

注意,扩展分区是不能格式化的。

在RHEL4及以前的版面,默认支持的文件系统未ext2,RHEL5默认使用的是ext3,RHEL6建议使用ext4。事实上RHEL5、6能够支持各种不同的文件系统,但是否可以真正使用这些文件系统,要看内核编译时能否支持(内核编译将在后文中介绍)。这里我们将/dev/sdb3格式化为ext4类型的文件系统,可以进行如下操作:

[root@localhost ~]# mkfs -t ext4 /dev/sdb3

# 注意,这一步须反复确认以保证正确书写,因为格式化

# 操作会删除磁盘分区上的所有数据,须谨慎操作!

——————————————运行结果—————————————————

今后如果想要查看某个磁盘分区的文件系统类型,可以使用blkid DEVICE命令,如:

[root@localhost ~]# blkid /dev/sdb3

这里可以看到/dev/sdb3这个设备的UUID号和文件系统类型。之所以要为磁盘分区生成UUID(全局唯一识别标识),是因为在实际生产环境中,一台服务器上可以挂载的磁盘分区可以达到成千上万台,故需要使用UUID对其进行区分。

二、mke2fs命令

在命令行中敲mkfs命令后连敲两下tab键补全命令,可以看到所有以mkfs开头的命令:

[root@localhost ~]# mkfs

这里mkfs -t ext4 == mkfs.ext4

mkfs -t ext3 == mkfs.ext3

故可以直接使用mkfs.ext4命令来进行格式化操作。

事实上,mkfs命令在进行格式化操作时,功能不及mke2fs强大,此命令是专门用来创建ext2系列的文件系统的。故:

mkfs -t ext2 == mkfs.ext2==mke2fs

使用man命令来查看mke2fs的帮助文档,会发现mke2fs命令也可以用来创建ext3、ext4等文件系统。

[root@localhost ~]# man mke2fs

MKE2FS(8)                                                            MKE2FS(8)

NAME

mke2fs - create an ext2/ext3/ext4 filesystem

DESCRIPTION

mke2fs is used to create an ext2, ext3, or ext4 filesystem, usually in a disk partition. device is the

special file corresponding to the device (e.g /dev/hdXX)...

-tfs-type  Specify the filesystem type (i.e., ext2, ext3, ext4, etc.) that is to be created.

# mke2fs -t {ext2|ext3|ext4}  也可以用来指明具体的文件系统类型

-jCreate the filesystem with an ext3 journal.

# mke2fs -j 可以用来创建ext3类型的文件系统。故mkfs -t ext3 == mkfs.ext3 == mke2fs -j

-bblock-size  Specify  the  size  of  blocks  in bytes.

# 指定块大小mk2efs -b {1024|2048|4096},默认单位是k,大小为4k。块大小通常只有3中情况,

#即1k,2k和4k,这个大小取决于cpu对内存页框大小的支持,x86系统的默认页框大小为4k

#(页框概念会在后文中介绍)

-Eextended-options  Set  extended  options  for  the  filesystem.

# 设定文件系统的扩展属性

-Lnew-volume-label  Set the volume label for the filesystem to new-volume-label.

# 设定卷标

-mreserved-blocks-percentage Specify the percentage of the filesystem blocks reserved for the super-user.

# 设定预留空间比例

-rrevision  Set the filesystem revision for the new filesystem.

# 设定预留给管理使用的块个数

默认情况下,mke2fs命令会将磁盘分区格式化ext2类型的文件系统,但该命令有自己的配置文件,可以让用户自行定制想要格式化的默认特性、以及各文件系统的默认特性:

[root@localhost ~]# vim /etc/mke2fs.conf

下面我们使用mke2fs命令再格式化一次/dev/sdb3:

[root@localhost ~]# mke2fs -t ext4 /dev/sdb3

——————————————运行结果—————————————————

使用tune2fs -l DEVICE命令,可以显示某磁盘分区文件系统的各种属性:

[root@localhost ~]# tune2fs -l /dev/sdb3

——————————————运行结果—————————————————

该命令可以和grep命令结合使用,以查询具体某一项属性值:

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Block size"

Block size:               4096

如果想换一种块大小,那么只能重新格式化,因此在格式化时,应该指定想要的块大小。这次再对/dev/sdb3格式化,并为其指定块大小:

[root@localhost ~]# mke2fs -t ext4 -b 2048 /dev/sdb3

——————————————运行结果—————————————————

再来查看一下块大小:

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Block size"

Block size:               2048

选择块大小应取决于存放文件的特性,如果磁盘上存放的多为体积较小的文件,则应使用较小的块大小;反之,最好使用块大小较大的方式。这是由于一个块只能属于一个文件,哪怕一个文件只占用了3个字节,也必须也占用一整个块。块大小越小,格式化需要的时间久越长。

除了-t,-f和-b选项,mke2fs还可以使用-L选项来设定卷标。使用卷标和UUID都是用来避免挂载在服务器上的设备发生混淆的常用机制,但是卷标也容易发生混淆情况,故UUID更常用。

再来格式化一次分区,这次为该分区加上卷标:

[root@localhost ~]# mke2fs -t ext4 -b 1024 -L MYDATA /dev/sdb3

——————————————运行结果—————————————————

使用blkid命令,来查看设备的UUID和卷标等信息:

[root@localhost ~]# blkid /dev/sdb3

/dev/sdb3: UUID="11d06150-6a5b-47b1-839c-557e29fdf9f5" TYPE="ext4"LABEL="MYDATA"

假定一个磁盘只有10G,现在该磁盘已经彻底用完了,此时想将该磁盘上的数据挪出来一部分是无法操作的,因为任何对磁盘的增加、删除和修改操作都需要占用该磁盘的空间。故磁盘分区在格式化之前,都要预留一部分,使用tune命令可以查看到某个分区的预留空间大小:

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Reserved”

——————————————运行结果—————————————————

使用bc命令调出计算器,来计算一下预留空间所占整个磁盘大小的比例:

[root@localhost ~]# bc

如果一个磁盘分区只有5G或者10G,5%的预留空间微不足道,但如果一块磁盘分区有100G,那么预留空间将会达到5G,这其实是一种资源的浪费,故使用mke2fs在进行磁盘分区格式化时,可以使用-m选项,来设定预留给管理使用的块所占据的总体空间的比例:

[root@localhost ~]# mke2fs -t ext4 -L MYDATA -b2048-m 3 /dev/sdb3

——————————————运行结果—————————————————

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Reserved"

可以看到预留空间大小比之前大为缩小,这是由于块大小改变了。如果将块大小改为1048,可以看到预留空间会有所变化:

[root@localhost ~]# mke2fs -t ext4 -L MYDATA -b1024-m 3 /dev/sdb3

——————————————运行结果—————————————————

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Reserved"

三、 tune2fs命令

事实上,mke2fs和tune2fs的关系类似于useradd/usermod的关系,两者的大多数选项都一样,后者除了不能调整块大小和文件系统类型外,可以用来调整前者设定的值。

-l显示文件系统超级块信息(超级块的概念将在后文中详解)

-L调整卷标

-m调整预留空间比例

-r调整预留给管理使用的块个数

————————下述选项后文中会详解——————————

-o调整默认挂载选项

-O调整文件系统默认特性

-E调整文件系统的扩展属性

[root@localhost ~]# tune2fs -m 2 /dev/sdb3

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Reserved"

[root@localhost ~]# tune2fs -r 200000 /dev/sdb3

[root@localhost ~]# tune2fs -l /dev/sdb3 | grep "Reserved"

[root@localhost ~]# tune2fs -L TESTDATA /dev/sdb3

[root@localhost ~]# blkid /dev/sdb3

事实上有个专门的命令e2label可以用来设定和调整卷标,其格式为:

e2label DEVICE [volum_label]

[root@localhost ~]# e2label /dev/sdb3

[root@localhost ~]# e2label /dev/sdb3 MYDAT

# 修改卷标

[root@localhost ~]# e2label /dev/sdb3

# 查看修改后的结果

MYDAT

四、挂载文件系统

所谓挂载,就是将某个磁盘分区和一个目录建立关联关系的过程。既然有挂载,那么就会有卸载。所谓卸载,就是解除某个磁盘分区和目录的关联关系。

挂载使用的命令为mount,其格式为:

mount [-t fstype] DEVICE MOUNT_POINT

mount [-t fstype] LABEL=”Volume_label”MOUNT_POINT

mount [-t fstype] UUID=”UUID”MOUNT_POINT

这里[DEVICE]是要挂载的文件系统,MOUNT_POINT为挂载点,即要挂载的位置。在使用mount命令时,通常需要指定所挂载的文件系统的类型,如果不指定,那么mount命令会自动调用blkid命令来判断该文件系统的类型。

卸载(拆除关联关系)使用的命令为umont,其格式为:

umount DEVICE

或者

umount MOUNT_POINT

拆除关联关系只需要指定一个,或者是设备,或者是挂载点。

下面来举例演示一下挂载和卸载的过程:

[root@localhost ~]# mkdir /mydata

# 创建一个目录/mydat

[root@localhost ~]# cp /etc/fstab /mydata/

[root@localhost ~]# cp /etc/rc.d/rc.sysinit /mydata/

[root@localhost ~]# cp /etc/rc.d/init.d/functions /mydata

# 复制三个文件到/mydata下

[root@localhost ~]# ls /mydata

fstab  functionsrc.sysinit

# 查看/mydata下的文件

[root@localhost ~]# mount -t ext4 /dev/sdb3 /mydata

# 将/dev/sdb3挂载到/mydata下

[root@localhost ~]# ls /mydata

lost+found

# 这时可以看到/mydata下原有的三个文件被隐藏了

[root@localhost ~]# cd /mydata

[root@localhost mydata]# ls

lost+found

# 进入到/mydata下再次查看,可以发现原有的三个文件还是被隐藏了

[root@localhost mydata]# cp /etc/inittab ./

# 复制一个新文件到挂载后的/mydata目录下

[root@localhost mydata]# ls

inittab  lost+found

# 可以看到新文件在/mydata里

[root@localhost mydata]# umount /dev/sdb3

# 卸载/dev/sdb3

umount: /mydata: device is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

# 这时报系统繁忙的错误,是因为目前处在/mydata目录下

[root@localhost mydata]# pwd

/mydata

[root@localhost mydata]# cd

# 退出/mydata目录

[root@localhost ~]# umount /dev/sdb3

# 再次卸载,成功

[root@localhost ~]# ls /mydata

fstab  functions  rc.sysinit

# 再次查看/mydata目录,可以看到之前被隐藏的三个文件又出现了,但是后来复制的文件不存在了

[root@localhost ~]# cd /mydata

# 进入/mydata目录

[root@localhost mydata]# mount /dev/sdb3 /mydata

# 注意:和卸载不同的是,处于目录中可以挂载成功

[root@localhost mydata]# ls

fstab  functions  rc.sysinit

# 此时能看到这三个文件,是因为当前视图还没有被更改

[root@localhost mydata]# cd

# 离开/mydata目录

[root@localhost ~]# cd -

/mydata

# 再次进入/mydata目录

[root@localhost mydata]# ls

inittab  lost+found

# 查看当前目录会发现原有的三个文件又被隐藏了,取而代之的是挂载后的文件

通过上述例子,可以总结出以下规律:

A:挂载之后,原有数据会被隐藏,因此不能挂载到系统的常用目录上;

B:卸载之时,要确保没有进程正在访问挂载的设备,否则无法挂载

直接使用mount命令可以查看所有挂载的文件系统:

[root@localhost ~]# mount

—————————————运行结果———————————————

除了通过指定具体的设备挂载,指定卷标也可以用来挂载文件系统:

[root@localhost ~]# umount /dev/sdb3

# 卸载设备/dev/sdb3

[root@localhost ~]# mount

—————————————运行结果———————————————

[root@localhost ~]# e2label /dev/sdb3

MYDAT

# 查看设备/dev/sdb3的卷标

[root@localhost ~]# mount LABEL="MYDAT" /mydata

# 通过卷标来指定要挂载的设备

[root@localhost ~]# mount

—————————————运行结果———————————————

# 可以看到通过卷标挂载的新设备

再来通过UUID挂载设备:

[root@localhost ~]# umount /dev/sdb3

# 卸载设备/dev/sdb3

[root@localhost ~]# mount

—————————————运行结果———————————————

[root@localhost ~]# blkid /dev/sdb3

/dev/sdb3: UUID="ead64b7a-80bd-4ad7-af3f-bece9a76e04c" TYPE="ext4" LABEL="MYDAT"

# 查看/dev/sdb3的UUID

[root@localhost ~]# mount UUID="ead64b7a-80bd-4ad7-af3f-bece9a76e04c" /mydata

# 通过UUID来挂载/dev/sdb3

[root@localhost ~]# mount

—————————————运行结果———————————————

需要注意的是,上述手动挂载的设备,当重新启动系统后,是不会自动挂载的。所有系统启动后会自动挂载的文件系统都定义在/etc/fstab这个文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
说明: 除非特别声明,所有程序均使用VC++6.0 MFC编写。 所有程序均为练手用,放弃一切权利,同时不承担任何责任。 显式遵照 GPL v3.0标准。 QuoteCorrection 20110722 1119.7z 处理 清风徐来 水波不兴 邮件使用,将 西文 "" 转换为 “” 原理:ASC 转 UNICODE(修改) 转 ASC。 处理文件夹。 CSourceCodeEdit X4括号判断末行 20110721 1216.7z C语言源代码格式化。 处理文件夹。 PLT2KMLX14解决最后一行的问题 20110721 0931.7z PLT2KML 改CString完工 20120731 1632.7z WPT2KMLx4解决空行末行 20110721 0948.7z WPT2KML 改CString完工 20120731 1700.7z WPT2KML 全部改CString慢 改strcat慢 20120801 1338.7z WPT2KML 全部改CString慢 改strcat慢 20120801 1559.7z WPTPLT2KMLx12PLTWPT初步 20110721 1006.7z WPTPLT2KML 基本完工 20120801 1618.7z OZI格式的轨迹文件转KML格式的轨迹文件。 原理:ASC(转换) 转 UNICODE 转 UTF-8。 处理子目录 SubtitleENCN 20110726 1924.7z 剔除中英文字幕中的中文。 原理:ASC 转 UNICODE(剔除中文) 回转ASC。 StringArrayBuildX10排版完成 20110728 0853.7z UNICODE 0-65535 中汉字的拼音。 从 CnToSpell.java 中提取的拼音。 StringArrayX6汉字转拼音 20110729 1418 拼音库需要修正.7z 汉字转拼音 原理:ASC 转 UNICODE(汉字转拼音) 回转ASC。 TXTEditEnterX1单文件排版 20110729 1902.7z 排版用 原理:ASC 转 UNICODE(排版) 回转ASC(替换掉原来的文件)。 doyouhikeList 磨房报名人员ID格式化后发悄悄话 20110729 1856.7z 磨房报名人员ID格式化后发悄悄话 原理:ASC 转 UNICODE(排版) 回转ASC(替换掉原来的文件)。 DOC2TXTEdit 20110919 1753.7z 处理PDF的文件转TXT后的换行问题。==末尾是空格不用处理的。 原理:ASC 转 UNICODE(行的结尾只要不是汉字就换行) 回转ASC。 PLTClear 清除PLT文件夹的名 20111006 1912.7z 处理 GPX转PLT之后, OziExplorer Track Point File Version 2.1 WGS 84 Altitude is in Feet Reserved 3 0,2,255, $$$$$$ ,0,0,2,8421376 文件名会显示在 GM 做的地图里。清除掉 原理:ASC 转 UNICODE(修改) 转 ASC。 处理文件夹。 AngleBracketsSubtitle 20111006 1935.7z 处理 清除字幕中的字体、颜色标记。 原理:ASC 转 UNICODE(修改) 转 ASC。 处理文件夹。 UTF82ANSI 20111006 2008.7z 处理 将 UTF-8 格式的 字幕(或者文件) 转 ANSI 格式。 原理:UTF-8 2 UNICODE 2 ANSI。 处理文件夹。 GPX2KML 20120102 1630.7z 处理 将 UTF-8 格式的 字幕(或者文件) 转 ANSI 格式。 原理:查找坐标点, 然后由ANSI 2 UNICODE 2 UTF-8。 处理文件夹。 <trkpt lat="36.409595000" lon="114.187676000"> <ele>258.000000</ele> <time>2011-03-08T08:20:31Z</time> <speed>3.666667</speed> </trkpt> FileFolderGenerate 20120112 1514.7z 文件夹生成函数CreateDirectory的测试。 功能:在指定目录下生成256个文件夹,每个文件夹内生成256个32K的文本文件,内容为“A”。 FileGenerate 20111121 1641.7z 功能: 猜想:对于“8.3格式文件”的文件名,(也许是出于向后兼容的目的),操作系统总是尝试以“大写”的文件名保存,小写的文件名或者扩展名也用大写表示,然后在“文件登记项”的32B的第13个字节(偏移量为0x0C)标识。于是检验大小写文件名对可创建的文件数量的影响。 还是将电脑的最后一个分区格式化为 FAT32 格式。(为了保证一般性,不是在“根目录下”检验的,相信也同样适合于根目录。) 然后使用如下四种读写文件的方法进行测试, 1、C语言函数fopen(),UNICODE版本是 _wfopen()。 2、C++ fstream 3、mfc CFile、CStdioFile类 4、采用WinCE的API CreateFile 其中每种方式都检测9种情况: 文件名大写.扩展名大写(B1)、文件名大写.扩展名小写(B2)、文件名大写.扩展名混写(B3) 文件名小写.扩展名大写(B4)、文件名小写.扩展名小写(B5)、文件名小写.扩展名混写(B6) 文件名混写.扩展名大写(B7)、文件名混写.扩展名小写(B8)、文件名混写.扩展名混写(B9) shuangseqiu 20120226 1931.7z 功能: 寻找双色球的蓝球的间隔规律。 单文件处理。 CreateFile读取文件并进行处理。 CreateFile写入文件,以供分析之用。 FileNumber 20111028 2219.7z 功能: 给文件编号。(文件有遗漏。) CreateFile读取文件。 CFile写入文件。(==修正为CreateFile) !!!!KMLPointReverse 20111006 2205.7z 功能: 编辑KML格式的GPS轨迹的时候,将轨迹点前后倒置! CSourceCodeEnter 20120229 1759.7z 由 CSourceCodeEdit X4括号判断末行 20110721 1216.7z 简单修正而得!加入了对“#”的处理。(很多编辑器、很多人喜欢用回车而不喜欢用换行符号!) C语言源代码格式化。 处理文件夹。 CSourceCodeEnterFile 20120611 0914.7z 处理文件 CSourceCodeEnterFile WriteFile 20120713 0930.7z CSourceCodeEnterFile WriteFile TRUNCATE_EXISTING 20120718 0938.7z Comma2Enter 20120614 1626.7z 将????分隔的文本文件改为回车换行分隔。 处理文件。 rgb32bmpFile 640x480 20120713 1331.7z 640x480转BMP文件 处理单文件 RGB32BMP 20120713 1347.7z 640x480转BMP文件 处理文件夹 EXTnamebig2small 扩展名更改-外部申请内存块 b2s s2b 20120718 1344.7z 文件名扩展的大写←→小写转换。 递归调用处理子目录 YUYV2BMP 20120723 1109 算法1.7z YUYV的数据转换成RGB的数据成功 递归调用处理子目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值