centos inodes centos镜像
Centos的Inode和Block的相关知识
本经验均在CentOSrelease6.7(Final)下操作,如知识有欠缺之处欢迎批评指正。
linux的inode及block的相关知识:
1> Linux系统分区格式化文件系统之后,系统会分为Inode及Block两部分:
1)Inode为系统文件的属性信息(ls-l的结果)及指向文件实体的指针,但是没有存放文件名,一般在上级目录里的Block。
2)Block为存放数据的,ext3/ext4一般为1k,2k,4k,一般默认4k
3)一个文件不论多大至少占用一个Inode和一个Block,一个Block只能存放一个文件的内容,block的数量大于Inode的数量,多个文件可以占用同一个 inode(硬链接)。
4)访问文件,通过文件-->inode(验证权限)--->blocks.
5)inode一般情况默认256B,block大小1k,2k,4k,默认4k,注意,引导分区等特殊分区除外。
6)通过df-i查看inode的数量及使用情况,dumpe2fs/dev/sda1查看inode及block的大小和数量。
7)一个block只能被一个文件使用,如果一个文件很小block太大,剩余空间浪费,无法继续被其他文件使用。
8)block不是越大越好,根据业务的文件大小进行选择,一般就是默认 4k。
9)可以在格式化的时候改变inode及block的大小,使用mkfs.ext4-b 2048-I 1024/dev/sdb2
2>Linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
1.命令格式:
df [选项] [文件]
2.参数:
df-i查看参数多少个
[root@techW~]# df-iFilesystem Inodes IUsed IFree IUse% Mounted on/dev/mapper/vg_techw-lv_root 1152816 55846 1096970 5%/tmpfs 125596 1 125595 1%/dev/shm/dev/sda1 128016 38 127978 1%/boot
df-h查看磁盘大小:
[root@techW~]# df-hFilesystem Size Used Avail Use% Mounted on/dev/mapper/vg_techw-lv_root 18G 1.5G 15G 9%/tmpfs 491M 0 491M 0%/dev/shm/dev/sda1 477M 36M 416M 8%/boot
查看当前系统分区的Inode及Block的总量及使用量:
[root@techW~]# dumpe2fs/dev/sda1| grep-i"block size"dumpe2fs 1.41.12(17-May-2010)Block size: 1024[root@techW~]# [root@techW~]# [root@techW~]# dumpe2fs/dev/sda1| grep-i"inode size"dumpe2fs 1.41.12(17-May-2010)Inode size: 128###boot分区为128,常规分区为256[root@techW~]# [root@techW~]# [root@techW~]# dumpe2fs/dev/sda1| grep-i"inode count"dumpe2fs 1.41.12(17-May-2010)Inode count: 128016[root@techW~]# [root@techW~]# dumpe2fs/dev/sda1| grep-i"block count"dumpe2fs 1.41.12(17-May-2010)Block count: 512000Reserved block count: 25600
3>添加一块磁盘,格式化,改变Inode及 Block的大小,挂载查看硬盘的Inode及Block数量:
1)添加一块5G的磁盘,为方便区分设置为/dev/sdb,fdisk分区,然后mkfs.ext4格式化
(虚拟机增加一块5G的硬盘,分区,格式化)
[root@techW~]# fdisk/dev/sdbDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x2d37eabe.Changes will remain in memory only, until you decide to write them.After that, of course, the previous content won't be recoverable.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)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### add a new partitionCommand action e extended p primary partition(1-4)pPartition number(1-4): 2###为做区分,选择2First cylinder(1-652, default 1): Using default value 1Last cylinder,+cylinders or+size{K,M,G}(1-652, default 652): Using default value 652Command(m for help): w### write table to disk and exitThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.
分区时的参数命令:
a toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partitionl list known partition typesm print this menun add a new partitiono create a new empty DOS partition tablep print the partition tableq quit without saving changess create a new empty Sun disklabelt change a partition's system idu change display/entry unitsv verify the partition tablew write table to disk and exitx extra functionality(experts only)
[root@techW~]# mkfs.ext4/dev/sdb2mke2fs 1.41.12(17-May-2010)Filesystem label=OS type: LinuxBlock size=4096(log=2)###默认的Block的大小为4096Fragment size=4096(log=2)Stride=0 blocks, Stripe width=0 blocks327680 inodes, 1309289 blocks65464 blocks(5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=134217728040 block groups32768 blocks per group, 32768 fragments per group8192 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736Writing inode tables: done Creating journal(32768 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 26 mounts or180 days, whichever comes first. Use tune2fs-c or-i to override.
2)###inode的大小范围为128-2048,block的大小范围为1024-4096####
3)将Block和Inode的大小都改为2048:
[root@techW~]# mkfs.ext4-b 2048-I 2048/dev/sdb2mke2fs 1.41.12(17-May-2010)Filesystem label=OS type: LinuxBlock size=2048(log=1)Fragment size=2048(log=1)Stride=0 blocks, Stripe width=0 blocks326400 inodes, 2618578 blocks130928 blocks(5.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=540016640160 block groups16384 blocks per group, 16384 fragments per group2040 inodes per groupSuperblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000Writing inode tables: done Creating journal(32768 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 30 mounts or180 days, whichever comes first. Use tune2fs-c or-i to override.
4)使用dumpe2fs命令查询Inode和Block的大小:
[root@techW~]# dumpe2fs/dev/sdb2| grep"Inode size"dumpe2fs 1.41.12(17-May-2010)Inode size: 2048###大小更改成功[root@techW~]# s/dev/sdb2| grep"Block size"dumpe2fs 1.41.12(17-May-2010)Block size: 2048###大小更改成功
CentOS系统下尝试恢复被删除的文件的方法集锦
背景说明:今天同事在用ftp更新网站内容是,将原来文件夹重命名以备份,再上传文件,上传完成后测试网站可以访问就将备份删除(脑袋抽筋了),结果发现备份中最重要的一个图片文件夹被删除,而上传的只是程序文件,导致所有图片丢失。
找回办法如下:
1、尝试方法一:debugfs
用debugfs工具,可以看到删除的列表,但没有找到批量恢复文件的办法(丢失的文件有1万多),可能是我方法不对。对于单个文件,debugfs是可以很方便恢复的。
大多数Linux发行版都提供一个debugfs工具,可以用来对Ext3文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。
首先以只读方式重新挂载被误删的文件所在分区。使用如下命令:(假设文件在/usr分区)
复制代码代码如下:
mount-r-n-o remount/usr
-r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的文件,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的文件:
复制代码代码如下:
fuser-v-m/usr
如果没有什么重要的进程,用以下命令停掉它们:
复制代码代码如下:
fuser-k-v-m/usr
然后就可以重新挂载这些文件系统了。
如果是把所有的文件统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入数据的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的数据不要写到/上面,避免破坏那些有用的数据。如果机器上有dos/windows,可以写到这些分区上面:
复制代码代码如下:
mount-r-n/dev/hda1/mnt/had
然后就可以执行debugfs:(假设Linux在/dev/hda5)
复制代码代码如下:
#debugfs/dev/hda5
就会出现debugfs提示符debugfs:
使用lsdel命令可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的文件有很多(这里找到2692个),第一字段是文件节点号,第二字段是文件所有者,第三字段是读写权限,接下来是文件大小,占用块数,删除时间。然后就可以根据文件大小和删除日期判断那些是我们需要的。比如我们要恢复节点是196829的文件:
可以先看看文件数据状态:
复制代码代码如下:
debugfs:stat
Inode: 196829 Type: regular Mode: 0644 Flags: 0×0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574— Mon May 27 13:52:04 2001
atime: 0x31a21dd1— Tue May 21 20:47:29 2001
mtime: 0x313bf4d7— Tue Mar 5 08:01:27 2001
dtime: 0x31a9a574— Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817………………………………….
TOTAL: 38
然后就可以用dump指令恢复文件:
复制代码代码如下:
debugfs:dump/mnt/hda/01.sav
这样就把文件恢复出来了。退出debugfs:
复制代码代码如下:
debugfs:quit
另一种方法是手工编辑inode:
复制代码代码如下:
debugfs:mi
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block#0 [594810]
…………………………….
Triple Indirect Block [0]
使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
复制代码代码如下:
debugfs:quit
然后用fsck检查/dev/hda5
复制代码代码如下:
fsck/dev/hda5
程序会说找到丢失的数据块,放在lost+found里面。
另外debugfs不适合恢复大文件。
2、尝试方法二、foremost
foremost是很不错的软件,非常简单,一个命令就恢复了所有图片,但是文件名却丢失了,那么多图片如何恢复名字,没有找到好的办法。同上面debugfs一样,如果是单个文件,或者知道文件名字,这个方法是可以的。但文件量过大,且必须恢复文件名,此方法则不行。
基本使用办法如下:
下载并编译安装 foremost:
复制代码代码如下:
[root@b2bapp1~]# wget
[root@b2bapp1~]# tar xf foremost-1.5.7.tar.gz-C/usr/src/
[root@b2bapp1~]# cd/usr/src/foremost-1.5.7/
[root@crushlinux foremost-1.5.7]# make&& make install
[root@b2bapp1~]# foremost-t png-i/dev/mapper/VolGroup-lv_root
Processing:/dev/mapper/VolGroup-lv_root
恢复完成后会在你的当前所在目录中建立一个 output目录,并在在 output目录下会建立 png子目录下会包括所有已经恢复回来的 png格式的文件。
注意:恢复回来的文件,文件名已经改变,另外 output目录下有一个 audit.txt文件是恢复成功文件的列表。
3、尝试方法三、extundelete
在网上终于找到一个非常优秀的恢复软件extundelete,通过它,我恢复了绝大部分软件(分部被覆盖导致丢失)。操作方法如下:
安装软件:
软件下载地址:
复制代码代码如下:
yum install e2fsprogs-devel libcom_err-devel-y
tar-jxf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make
make install
执行恢复动作:
复制代码代码如下:
[root@b2bapp1~]# extundelete/dev/mapper/VolGroup-lv_root--restore-all
上述命令表示恢复上述分区下的所有近期删除文件,我通过此办法找回了99%的文件,还有少数被覆盖。
extundelete其他主要用法:
单个文件的恢复:
复制代码代码如下:
extundelete/dev/sdaX--restore-file/path/file
目录恢复:
复制代码代码如下:
extundelete/dev/sdaX--restore-directory/path/dir
教训经验:
文件被删除后,恢复建议如下:
1、停止所有写入(可断网防止外部新的访问进入),最好将磁盘dd克隆一份。我们丢失的文件就是因为同事急于恢复,进行一些操作导致部分数据被覆盖。
2、如果被删除的文件被进程使用中,则千万别关闭该进程,用losf配合可以找回(因为还在内存中),这种恢复办法网上很多教程。
3、用合适的工具恢复。
复制代码代码如下:
[root@b2bapp1~]# wget
[root@b2bapp1~]# tar xf foremost-1.5.7.tar.gz-C/usr/src/
[root@b2bapp1~]# cd/usr/src/foremost-1.5.7/
[root@crushlinux foremost-1.5.7]# make&& make install
[root@b2bapp1~]# foremost-t png-i/dev/mapper/VolGroup-lv_root
Processing:/dev/mapper/VolGroup-lv_root
CentOS下SWAP分区建立及释放内存详解
方法一:
一、查看系统当前的分区情况:
free-m
二、创建用于交换分区的文件:
dd if=/dev/zero of=/whatever/swap bs=block_size(10M)count=number_of_block(3000)
三、设置交换分区文件:
mkswap/export/swap/swapfile
四、立即启用交换分区文件:
swapon/whateever/swap
五、若要想使开机时自启用,则需修改文件/etc/fstab中的swap行:
/whatever/swap swap swap defaults 0 0
方法二
增加交换分区空间的方法:
1.查看一下/etc/fstab确定目前的分区
2.swapoff/dev/hd**
3.free看一下是不是停了.
4.fdisk删了停掉的swap分区
5.重新用FDISK建一个新的SWAP分区
6.mkswap/dev/hd**把新的分区做成swap
7.swapon/dev/hd**打开swap
8.修改/etc/fstab
操作实例:
1.查看系统Swap空间使用
# free
total used free shared buffers cached
Mem: 513980 493640 20340 0 143808 271780
-/+ buffers/cache: 78052 435928
Swap: 1052248 21256 1030992
2.在空间合适处创建swap文件
# mkdir swap
# cd swap
# dd if=/dev/zero of=swapfile bs=1024 count=10000
10000+0 records in
10000+0 records out
# ls-al
total 10024
drwxr-xr-x 2 root root 4096 7月 28 14:58.
drwxr-xr-x 19 root root 4096 7月 28 14:57..
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
# mkswap swapfile
Setting up swapspace version 1, size= 9996 KiB
3.激活swap文件
# swapon swapfile
# ls-l
total 10016
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
# free
total used free shared buffers cached
Mem: 513980 505052 8928 0 143900 282288
-/+ buffers/cache: 78864 435116
Swap: 1062240 21256 1040984
生成1G的文件
# dd if=/dev/zero of=swapfile bs=10M count=3000
创建为swap文件
#mkswap swapfile
让swap生效
#swapon swapfile
查看一下swap
#swapon-s
[root@cluster/]# swapon-sFilenameTypeSizeUsedPriority/dev/sda3 partition10201161728-1/state/partition1/swap/swapfile file307199920-2
加到fstab文件中让系统引导时自动启动
#vi/etc/fstab
/state/partition1/swap/swapfil swap swap defaults 0 0
完毕。
二,LINUX释放内存
细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.
先来说说free命令
[root@cluster/]# free-m
total used free shared buffers cached
Mem: 31730 31590 139 0 37 27537
-/+ buffers/cache: 4015 27714
Swap: 30996 1 30994
其中:
total内存总数
used已经使用的内存数
free空闲的内存数
shared多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache磁盘缓存的大小
-buffers/cache的内存数:used- buffers- cached
+buffers/cache的内存数:free+ buffers+ cached
可用的memory=free memory+buffers+cached
有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94
那么我们来看看,如果我执行复制文件,内存会发生什么变化.
[root@cluster/]# cp-r/etc~/test/
[root@cluster/]# free-m
total used free shared buffers cached
Mem: 31730 31590 139 0 37 27537
-/+ buffers/cache: 4015 27714
Swap: 30996 1 30994
在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.
引用[url][/url]为了提高磁盘存取效率, Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放?
[root@cluster/]# free-m
total used free shared buffers cached
Mem: 31730 31590 139 0 37 27537
-/+ buffers/cache: 4015 27714
Swap: 30996 1 30994
MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:
[root@cluster/]# cat/proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@cluster/]# sync
手动执行sync命令(描述:sync命令运行 sync子例程。如果必须停止系统,则运行 sync命令以确保文件系统的完整性。sync命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O和读写映射文件)
[root@server test]# echo 3/proc/sys/vm/drop_caches
[root@server test]# cat/proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free-m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.
有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches(since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1/proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2/proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
这几天发现linux系统内存一直涨,即使把apache和mysql关闭了,内存也不释放,可以使用以下脚本来释放内存:
脚本内容:
#!/bin/sh
# cache释放:
# To free pagecache:
/bin/sync
/bin/sync
#echo 1/proc/sys/vm/drop_caches
# To free dentries and inodes:
#echo 2/proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes:
echo 3/proc/sys/vm/drop_caches
利用系统crontab实现每天自动运行:
crontab-e
输入以下内容:
00 00***/root/Cached.sh
每天0点释放一次内存,这个时间可以根据自己需要修改设置
在运行./Cached.sh时如果提示错误:Permission denied权限的问题,可以运行