Linux如何扩展XFS文件系统
发布时间:2025-05-14 04:47:53 发布人:远客网络
一、Linux如何扩展XFS文件系统
1、XFS是一个开源的(GPL)日志文件系统,最初由硅谷图形(SGI)开发,现在大多数的Linux发行版都支持。事实上,XFS已被最新的CentOS/RHEL 7采用,成为其默认的文件系统。在其众多的特性中,包含了“在线调整大小”这一特性,使得现存的XFS文件系统在已经挂载的情况下可以进行扩展。然而,对于XFS文件系统的缩减却还没有支持。
2、要扩展一个现存的XFS文件系统,你可以使用命令行工具xfs_growfs,这在大多数Linux发行版上都默认可用。由于XFS支持在线调整大小,目标文件系统可以挂在,也可以不挂载。
3、下面展示了xfs_growfs的基本用法:
4、 作为目标XFS文件系统来扩展,你可以指定挂载点、磁盘分区或者逻辑卷(在使用LVM时),使用数据块数量来指定新的XFS文件系统的大小。你可以使用xfs_info命令行工具来检查数据块大小和数量:
5、 要将XFS文件扩展到1986208:
6、 如果你不使用“-D”选项来指定大小,xfs_growfs将会自动扩展XFS文件系统到最大的可用大小。
7、注意,当你扩展一个现存的XFS文件系统时,必须准备好事先添加用于XFS文件系统扩展的空间。这虽然是很显然的事,但是如果在所在的分区或磁盘卷上没有空闲空间可用的话,xfsgrowfs就没有办法了。同时,如果你尝试扩展XFS文件系统大小到超过磁盘分区或卷的大小,xfsgrowfs将会失败。
二、Linux系统下不小心使用rm命令删除的文件能有办法恢复吗
概述
可以恢复,使用系统自还工具debugfs来还原删除的文件
可以恢复,使用系统自还工具debugfs来还原删除的文件
1、查看一下当前系统版本号,及文件系统格式
Filesystem Type 1K-blocks Used Available Use% Mounted on
ext4 51475068 22730068 26123560 47%/
tmpfs tmpfs 3966808 68 3966740 1%/dev/shm
/dev/sda2 ext4 487652 42534 419518 10%/boot
ext4 901188872 20070036 835334364 3%/home
2、新建一个文件夹及文件my.txt,然后删除
[root@localhost local]# mkdir test
[root@localhost local]# cd test
[root@localhost test]# touch my.txt
-rw-r–r–. 1 root root 0 1月 4 15:22 my.txt
[root@localhost test]# rm-f my.txt
3、运用,系统自还工具debugfs来修复打开,刚刚被删除文件所在的分区,用ls加-d参数显示刚刚删除文件所在的目录
[root@localhost test]# debugfs
debugfs: open/dev/mapper/VolGroup-lv_root
2378807(12). 2098175(4084)..<2378808>(4072) my.txt
4、显示有<>尖括号的就是我们要找的文件Inode号执行logdump–i<2378808>,然后输入“quit”退出debugfs
debugfs: logdump-i<2378808>
Inode 2378808 is at group 290, block 9438337, offset 2944
Journal starts at block 16826, transaction 2237277
No magic number at block 30648: end of journal.
5、执行以下命令,进行恢复,bs与skip的值分别取自:block 9438337, offset 2944
dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337
bs对应上面的offset后面的值,skip对应block后面的值
[root@localhost test]# dd if=/dev/mapper/VolGroup-lv_root of=/usr/local/test/my.txt bs=2944 count=1 skip=9438337
2944字节(2.9 kB)已复制,0.00989032秒,298 kB/秒
Linux dd命令用于读取、转换并输出数据。
dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
if=文件名:输入文件名,缺省为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
bs=<字节数>:将ibs(输入)与欧巴桑(输出)设成指定的字节数;
cbs=<字节数>:转换时,每次只转换指定的字节数;
conv=<关键字>:指定文件转换的方式;
count=<区块数>:仅读取指定的区块数;
ibs=<字节数>:每次读取的字节数;
obs=<字节数>:每次输出的字节数;
seek=<区块数>:一开始输出时,跳过指定的区块数;
skip=<区块数>:一开始读取时,跳过指定的区块数;
三、XFS文件系统简介Linux中使用XFS文件系统的配置方法
XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Linux系统中。在linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。
采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。
XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。笔者曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。
XFS是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263= 9 x 1018= 9 exabytes,最大文件系统尺寸为18 exabytes。
XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。
XFS能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。
下载相应版本的内核补丁,解压补丁软件包,对系统核心打补丁
下载地址:
对核心打补丁,下载解压后,得到一个文件:xfs-1.1-2.4.18-all.patch文件。
# patch-p1</path/to/xfs-1.1-2.4.18-all.patch
修补工作完成后,下一步要进行的工作是编译核心,将XFS编译进Linux核心可中。
首先运行以下命令,选择核心支持XFS文件系统:
复制代码代码如下:#make menuconfig
在“文件系统“菜单中选择:
SGI XFS filesystem support##说明:将XFS文件系统的支持编译进核心
SGI XFS filesystem support##说明:以动态加载模块的方式支持XFS文件系统
另外还有两个选择: Enable XFS DMAPI##说明:对磁盘管理的API,存储管理应用程序使用
Enable XFS Quota##说明:支持配合Quota对用户使用磁盘空间大小管理
完成以上工作后,退出并保存核心选择配置
如果你对以上复杂繁琐的工作没有耐心或没有把握,那么可以直接从SGI的站点上下载已经打好补丁的核心,其版本为2.4.18。它是一个rpm软件包,你只要简单地安装即可。SGI提交的核心有两种,分别供smp及单处理器的机器使用。
2.创建XFS文件系统
完成对核心的编译后,还应下载与之配套的XFSprogs工具软件包,也即mkfs.xfs工具。不然我们无法完成对分区的格式化:即无法将一个分区格式化成XFS文件系统的格式。要下载的软件包名称:xfsprogs-2.0.3。
将所下载的XFSProgs工具解压,安装,mkfs.xfs自动安装在/sbin目录下。
使用mkfs.xfs格式化磁盘为xfs文件系统,方法如下:
复制代码代码如下:#/sbin/mkfs.xfs/dev/sda6#说明:将分区格式化为xfs文件系统,以下为显示内容:
meta-data=/dev/sda6 isize=256 agcount=8, agsize=128017 blks
data= bsize=4096 blocks=1024135, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=0
log=internal log bsize=4096 blocks=1200
realtime=none extsz=65536 blocks=0, rtextents=0
格式化磁盘时,如果mkfs.xfs提示你分区原本已被格式化为其它文件系统,可以使用参数–f强行格式化:
复制代码代码如下:#/sbin/mkfs.xfs–f/dev/sda6
3.加载XFS文件系统
最后,为了让系统启动后就自动加载,应该更改/etc/fstab,这样系统启动后就会自动加载xfs分区而不必每次都手工加载。
要说明的一点是目前的xfs由于受linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式加载。
要说明的一点是目前的xfs由于受linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式加载。
要使得系统中的其它分区使用XFS文件系统,还有一步是迁移文件系统。建议在迁移文件系统时,首先将磁盘上的数据、文件先备份,以免发生不可挽回的损失,在进行文件系统转换之间,最好能将整个系统进行完全备份。这一步有很多种方法,本文仅就笔者的迁移方法加以描述。各位可以按照自己习惯的方式去完成。
如果你想得到一个纯的xfs系统(系统的所有文件系统均采用XFS文件系统)话,还得将根文件系统也格式化为xfs文件系统。这实际上是比较繁杂的一步。因为根文件系统不能被umount,所以,必须首先创建一个分区,其文件系统为ext2文件系统,然后将目前的根分区上的所有文件与目录,原原本本地复制到这一个分区,然后更改/etc/fstab文件,替换原来的根分区。
$ mount-t ext2/dev/hda4/mnt/temp
$ tar lcvf-.|(cd/mnt/temp; tar xpvf-)
以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。
以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。
接着,将下次启动的根分区更改到/dev/hda4分区,更改/etc/fstab文件及/etc/lilo.conf,然后,运行 lilo.
重新启动后,新的根分区就已经为/dev/hda4。
接下来,创建一个xfs文件系统的分区:
复制代码代码如下:$ mkfs-t xfs/dev/hda2
加载此分区,采用两样的方法,将根分区的内容复制到此分区
复制代码代码如下:$ mount-t xfs/dev/hda2/mnt/temp
$ tar lcvf-.|(cd/mnt/temp; tar xpvf-)
再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:
再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:
将新建的xfs分区用作根分区,保存以上设置。再次检查配置文件内容,确认无误后再重新启动系统。如果你的设置全部正确,那么系统成功启动后,你就拥有一个纯XFS文件系统的系统了。