Fork me on GitHub

linux概念之分区与文件系统

硬盘,分区,文件系统,格式化

 

分区是分区,格式化就是安装文件系统。如果不格式化,原有内容就不会丢失。
直到今天,才理解了这一点,格式化与文件系统的关系。一定不要格式化操作。

分区类型

[root@250-shiyan dev]# fdisk /dev/sda

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):
Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1

 

磁盘文件系统    ext3
内存文件系统    tmpfs
网络文件系统    nfs,mfs,gfs

proc文件系统是伪文件系统(也即虚拟文件系统)
devpts文件系统是伪文件系统(也即虚拟文件系统)
tmpfs文件系统是内存文件系统

sysfs 是一种基于 ramfs 实现的内存文件系统,与其它同样以 ramfs 实现的内存文件系统(configfs,debugfs,tmpfs,...)
mfs文件系统

[root@250-shiyan connections]# mount|column -t
/dev/mapper/VolGroup-lv_root  on  /                         type  ext4         (rw)
proc                          on  /proc                     type  proc         (rw)
sysfs                         on  /sys                      type  sysfs        (rw)
devpts                        on  /dev/pts                  type  devpts       (rw,gid=5,mode=620)
tmpfs                         on  /dev/shm                  type  tmpfs        (rw)
/dev/sda1                     on  /boot                     type  ext4         (rw)
none                          on  /proc/sys/fs/binfmt_misc  type  binfmt_misc  (rw)
sunrpc                        on  /var/lib/nfs/rpc_pipefs   type  rpc_pipefs   (rw)
nfsd                          on  /proc/fs/nfsd             type  nfsd         (rw)
192.168.2.231:9421            on  /mfs1                     type  fuse.mfs     (rw,nosuid,nodev,allow_other)

[root@250-shiyan connections]# df -ha
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   15G  1.7G   12G  13% /
proc                             0     0     0    - /proc
sysfs                            0     0     0    - /sys
devpts                           0     0     0    - /dev/pts
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   32M  428M   7% /boot
none                             0     0     0    - /proc/sys/fs/binfmt_misc
sunrpc                           0     0     0    - /var/lib/nfs/rpc_pipefs
nfsd                             0     0     0    - /proc/fs/nfsd
192.168.2.231:9421            200G     0  200G   0% /mfs1


文件系统类型
Andrew文件系统(AFS) 结构与NFS相似,由卡内基·梅隆大学信息技术中心(ITC)开发、现由前ITC职员组成的Transarc公司负责开发和销售。AFS较NFS有所增强。
AFS是一种文件系统,它能够使用户方便、高效地共享分布在局域网或广域网中的文件,并通过鉴权数据库与ACL的配合为用户提供更高的安全性。
文件系统                                  类型名称        用途
Second Extended filesystem            ext2            最常用的Linux文件系统
Three Extended filesystem            ext3            ext2的升级版,带日志功能
Minix filesystem                        minix           Minix文件系统,很少用
RAM filesystem                           ramfs           内存文件系统,速度超快
Network File System(NFS)             NFS             网络文件系统,由SUN发明,主要用于远程文件共享
DOS-FAT filesystem                   msdos              ms-dos文件系统
VFAT filesystem                         vfat            Windows95/98采用的文件系统
NT filesystem                             ntfs            Windows NT采用的文件系统
HPFS filesystem                         hpfs            OS/2采用的文件系统
/proc filesystem                        proc            虚拟的进程文件系统
ISO 9660 filesystem                  iso9660         大部份光盘所用的文件系统
UFS filesystem ufs                      Sun             OS所用的文件系统
Apple Mac filesystem                   hfs             Macintosh机采用的文件系统
Novell filesystem                          ncpfs           Novell服务器所采用的文件系统
SMB filesystem                           smbfs           Samba的共享文件系统
XFS filesystem                            xfs             由SGI开发的先进的日志文件系统,支持超大容量文件
JFS filesystem                             jfs             IBM的AIX使用的日志文件系统
ReiserFS filesystem                    reiserfs        基于平衡树结构的文件系统
Zettabyte File System               zfs            (暂定) Zettabyte File System是随Solaris 10一起发布的最新的文件系统。它是第一个128位的文件系统,包含多项创新技术。据Sun公司介绍,这是他们的最后一个文件系统,可见Sun公司对该文 件系统的自信。该文件系统现时Linux还不支持,所以上面介绍文件类型时说明是暂定zfs。Sun ZFS文件系统的对外移植许可方式采用了CDDL标准,与Linux平台采用的GPL许可标准并不兼容 ,而导致了目前为止ZFS尚无法顺利地在Linux平台上使用。但开源社区启动了一个zfs on fuse项目,可以在Linux use space下使用zfs系统。
文件系统是一个完整的目录结构,包括根目录和他底下任何文件的目录,并且文件系统被限定在单一的逻辑卷上。
http://hi.baidu.com/ccircle/item/b9e5006c5068fe136895e607    文件目录结构较详细
/proc/partitions
/etc/fstab 是开机时的设定档,不过,实际挂载的项目是记录到 /etc/mtab 与 /proc/mounts 这两个档案当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个档案喔!
/proc/mounts
/etc/filesystems:系统指定的默认挂载文件系统类型
/proc/filesystems:Linux系统支持的文件系统类型        如果要使用一个不支持的,需要重新编译内核或插入相应的模块
mount中所显示的    mount -l (-l选项会多输出卷标)
mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfat mkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区
mkswap 把一个分区格式化成为swap交换区
/lib/modules/$(uname -r)/kernel/fs/    查看支持的文件系统驱动程序
文件系统是操作系统用于明确磁盘或分区上文件的方法和数据结构,即在磁盘上组织文件的方法。文件系统是整个操作系统中重要的组成部分,是操作系统正常运行的基本条件。了解Linux文件系统对于深入学习、研究Linux是非常重要的。
Linux系统核心可以支持十多种文件系统类型:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
这里面虽然是有了,但我怎么知道我的Linux系统有没有相关文件系统类型的驱动呢?我们可以通过 /lib/modules/$(uname -r)/kernel/fs/这个目录里面的信息来查看支持的文件系统驱动程序。
如果是在这之外的文件系统,就必需加上-t和相应的文件系统类型了。
挂载光盘应该加上-t iso9660,因为我们的系统文件系统的驱动中已经有了,所以我就不用加参数,系统就能认识了。

常见文件系统类型
不同的操作系统使用的文件系统类型也不同,例如Windows XP支持FAT32和NTFS文件系统。Linux支持的文件系统很多,下面简单介绍。
1.Minix
Minix是Linux支持的第1个文件系统,该文件系统对用户的限制很多,性能很低。其最大缺点是最大只支持64MB的硬盘分区,现在该文件系统类型已无人使用了。
2.ext
ext是专门为Linux操作系统设计的文件系统类型,称为扩展文件系统,在Linux发展的早期,起过重要的作用。但由于其稳定性、速度和兼容性方面存在许多缺陷,ext文件系统现在也很少使用。
3.ext2
ext2文件系统是为解决ext文件系统的缺陷而设计的可扩展、高性能的文件系统,称为二级扩展文件系统,是Linux系统中标准的文件系统,支持256个字节的长文件名,文件存取性能比ext有很大的提高。
4.ext3
ext3 文件系统是ext2的升级版本,兼容ext2。与ext2文件系统相比,ext3增加了文件系统日志记录功能,称为日志式文件系统,是目前Linux默认 采用的文件系统。由于具有了日志功能,当因断电或其他异常事件而非正常关机时,重启系统后操作系统会根据文件系统的日志,快速检测并恢复文件系统到正常的 状态,提高数据的安全性。
5.MS-DOS
这是DOS、Windows和一些OS/2计算机使用的文件系统。对于MS-DOS文件系统,文件名长度不能超过8个字符,扩展名不能超过3个字符。
6.UMSDOS
这是Linux使用的、扩展的DOS文件系统,增加了对长文件名、UID、GID、POSIX权限的支持,允许一个普通的DOS文件系统用于Linux。
7.VFAT
这是Windows 9x、Windows XP使用的扩展的DOS文件系统,增加对长文件名的支持。
8.ISO9660
这是一种针对ISO9660标准的CD-ROM文件系统,允许用户在PC、Mac和其他主要计算机平台上读取CD-ROM文件。几乎所有带有CD-ROM的计算机都可以从ISO9660文件系统读取文件。
9.SYSV
这是System V文件系统在Linux上的实现,实现了所有的Xenix、System V/386文件系统。
10.NFS
这是用于存取远程计算机硬盘的文件系统。
11.SMB
这是支持SMB协议的网络文件系统,Windows用它来实现工作组共享。
12.SWAP
这是一种特殊的分区,用于在内存和硬盘间交换数据的文件系统。
13.NTFS
这是Windows NT文件系统,Windows 2000/XP及以后的操作系统都支持该文件系统。


AFS文件系统
历史
AFS是美国卡内基梅隆大学CMU与IBM联合研制的(项目开始于1Array82年,相关文章始见于1Array86年),发行了几个版本,AFS3.0是顶峰之作。其后,针对AFS的工作转移到Transarc公司,AFS演变为OSF的分布式计算环境(DCE)的分布式系统(DFS)组成部分。1ArrayArray8 年 IBM 收购了 Transarc,并使 AFS 成为一个开放源码产品,叫做 OpenAFS。同时, OpenAFS 衍生了其他的分布式文件系统,如 Coda 和 Arla。其版本发展如下图所示:

AFS的版本演化
基本概念
AFS是专门为在大型分布式环境中提供可靠的文件服务而设计的。AFS扩展性好,能够扩展到几千个节点,提供一个统一的位置无关的名字空间。AFS规定了以"/afs/cellname"为第一级目录的基本结构,使用户能够在任何地方都能够使用同一个目录地址对自已的文件进行透明访问。

AFS的挂载示例

AFS中几个重要的概念:
单元(Cell):是AFS一个独立的维护站点(如上图的ihep.ac.cn),通常代表一个组织的计算资源。一个存储节点在同一时间内只能属于一个站点;而一个单元可以管理数个存储节点。
卷(Volumes):是一个AFS目录的逻辑存储单元,我们可以把它理解为AFS的cell之下的一个文件目录,如上图单元ihep.ac.cn之下的usr目录。AFS系统负责维护一个单元中存储的各个节点上的卷内容保持一致。
挂载点(Mount Points):关联目录和卷的机制,挂载点 卷,例如上图的/afs/ihep.ac.cn/usr这个挂载点就关联在usr卷上。
复制(Replication):隐藏在一个单元之后的卷可能在多个存储节点上维护着备份,但是他们对用户是不可见的。当一个存储节点出现故障是,另一个备份卷会接替工作。
缓存和回调(Caching and Callbacks):AFS依靠客户端的大量缓存来提高访问速度。当被多个客户端缓存的文件被修改时, 必须通过回调来通知其他客户端更新。
Tokens和Access Control List:用于访问权限管理,这里不在赘述。

设计架构
AFS 管理人员把单元划分为所谓的卷。虽然卷可以随硬盘分区协同扩展 (co-extensive),但大多数管理人员都不会将整个分区只分为一个卷。AFS 卷实际上是由一个单独的、称作 Volume Manager 的 UNIX 类型的进程管理的。您可以以一种常见的方式从 UNIX 文件系统目录安装卷。但是,您可以将 AFS 卷从一个文件服务器移动到另一个文件服务器 ?? 同样是由一个 UNIX 类型的进程来管理的 ?? 但是 UNIX 目录不能从一个分区实际地移动到另一个分区上。AFS 通过 Volume Location Manager 自动跟踪卷和目录的位置,并留意复制的卷和目录。因此,每当文件服务器非预期地停止操作,用户根本无需担心,因为 AFS 会把用户切换到另一个文件服务器机器上的复制卷,而用户可能都不会注意到。用户从来不对 AFS 服务器上的文件进行操作。他们操作已经由客户端缓存管理器从文件服务器中取出的文件。

AFS部署示例
AFS服务器运行下列进程:
文件服务器(File Server)进程:这个进程响应客户工作站对文件服务的请求,维护目录结构,监控文件和目录状态信息,检查用户的访问。
卷宗服务器(Volume Server)进程:此进程处理与卷宗有关的文件系统操作,如卷宗生成、移动、复制、备份和恢复。
基本监察服务器(Basic OverSeer Server)进程:这个进程运行于有BOS设定的服务器。它监控和管理运行其他服务的进程并可自动重启服务器进程,而不需人工帮助。
卷定位服务器(Volume Location Server)进程:该进程提供了对文件卷宗的位置透明性。即使卷宗被移动了,用户也能访问它而不需要知道卷宗移动了。
鉴别服务器(Authentication Server)进程:此进程通过授权和相互鉴别提供网络安全性。用一个“鉴别服务器”维护一个存有口令和加密密钥的鉴别数据库,此系统是基于Kerberos的。
保护服务器(Protection Server)进程:此进程基于一个保护数据库中的访问信息,使用户和组获得对文件服务的访问权。
更新服务器(Update Server)进程:此进程将AFS的更新和任何配置文件传播到所有AFS服务器。
备份服务器(Backup Server):维护备份数据库中的信息并管理卷的备份操作。
缓存管理器(Cache Manager):响应本地应用程序的请求,来跨 AFS 文件系统取出文件。并存放在缓存中。

AFS通
过在客户端大量开辟文件缓存来提高性能。如果文件是经常更改的源文件,那么文件的几个复制版本存在于多个客户端中可能不太好。因为用户很可能要频繁地更改
经常被请求的源文件,所以您会遇到两个问题:首先,文件很可能被保存在客户机缓存内,而同时还保存在几个文件服务器机器上的几个复制卷内;然后,Cache Manager不得不更新所有的卷。文件服务器进程把文件发送到客户机缓存内并随其附带一个回调,以便系统可以处理发生在其他地方的任何更改。如果用户更改了缓存在其他地方的复制文件,原始文件服务器将会激活回调,并提醒原始缓存版本它需要更新。
分布式版本控制系统也面临这个经典问题,但是有一点重要的区别:分布式版本控制系统在断开时可以运行得很好,而 AFS 文件系统的任一部分都不能断开。断开的 AFS 部分无法再次与原来的文件系统连接。失效的文件服务器进程必须与仍在运行的 AFS 文件服务器重新同步,但是不能添加可能在它断开后保存在本地的新更改
AFS还配有一套用于差错处理,系统备份和AFS分布式文件系统管理的实用工具程序。例如,SCOUT定期探查和收集AFS文件服务器的信息。信息在给定格式的屏幕上提供给管理员。设置多种阈值向管理者报告一些将发生的问题,如磁盘空间将用完等。另一个工具是USS,可创建基于带有字段常量模板的用户帐户。Ubik提供数据库复制和同步服务。一个复制的数据库是一个其信息放于多个位置的系统以便于本地用户更方便地访问这些数据信息。同步机制保证所有数据库的信息是一致的。

总结
AFS的优势:
1.历史悠久,技术成熟。
2.有较强的安全性(基于Kerberos)。
3.支持单一、共享的名字空间。
4.良好的客户端缓存管理极大的提高了文件操作的速度。

但以AFS作为机群中的共享文件系统也存在一些问题:
1.消息模型:和NFS一样,AFS作为早期的分布式文件系统是基于消息传递(Message-Based)模型的,为典型的C\S模式,客户端需要经过文件服务器才能访问存储设备,维护文件共享语义的开销往往很大。
2.性能方面:它使用本地文件系统来缓存最近被访问的文件块,但却需要一些附加的极为耗时的操作,结果,要访问一个AFS文件要比访问一个本地文件多花一倍的时间。
3.吞吐能力不足:AFS设计时考虑得更多的是数据的可靠性和文件系统的安全性,并没有为提高数据吞吐能力做优化,也没有良好的实现负载均衡;而当今互联网应用则经常面对海量数据的冲击,必须提高文件系统的I/O并行度,最大化数据吞吐率。
4.容错性较差:由于它采用有状态模型,在服务器崩溃,网络失效或者其他一些像磁盘满等错误时,都可能产生意料不到的后果。
5.写操作慢:AFS为读操作做优化,写操作却很复杂,读快写慢的文件系统不能提供好的读、写并发能力。
6.不能提供良好的异地服务能力,不能良好的控制热点信息的分布

AFS 的后代
由于一些对新文件系统的尝试,AFS 已经明显要退出了。两个这样的结合了开发人员从原始分布式文件系统架构中学到的经验的系统就是:Coda 和瑞典开放源码志愿者的成果 Arla。
Coda 文件系统是改进原始的 AFS 系统的第一次尝试。1Array87 年在 Carnegie Mellon University,开发人员想要使 Coda 成为对 AFS 的一次自觉的改进,当时 AFS 达到了 V2.0 版本。在上个世纪 80 年代末 Array0 年代初,Coda 文件系统首次发布了一个不同的缓存管理器:Venus。虽然 Coda 的基本功能集与 AFS 的类似,但是 Venus 支持支持 Coda 的客户机的连续操作,即使客户机已经从分布式文件系统断开了。Venus 具有与 AFS Cache Manager 完全相同的功能,即把文件系统任务从内核内部的 VFS 层取出。
从 1ArrayArray3 年起,编程人员就开始开发 Arla,这是一个提供 OpenAFS 的 GPL 实现的瑞典项目,但是大部分的开发都发生在 1ArrayArray7 年以后。Arla 模仿 OpenAFS 模仿得非常好,只是 XFS 文件系统必须运行在所有运行 Arla 的操作系统上。Arla 已经达到 V0.3Array 版本了,而且,就像 OpenAFS 一样,运行在所有的 BSD 流派、内核 V2.0x 版本以上的许多 Linux 内核以及 Sun Solaris 之上。Arla 确实为 AFS 实现了一个原本不在 AFS 代码中的功能:断开操作。但是具体情况可能会不同,开发人员也还没有完成测试。
至今,AFS及其变种仍然活跃在分布式文件系统的研究和应用领域。


7000 afs3-fileserver Andrew 文件系统(AFS)文件服务器
7001 afs3-callback 用于给缓存管理器回电的 AFS 端口
7002 afs3-prserver AFS 用户和组群数据库
7003 afs3-vlserver AFS 文件卷位置数据库
7004 afs3-kaserver AFS Kerberos 验证服务
7005 afs3-volser AFS 文件卷管理服务器
7006 afs3-errors AFS 错误解释服务
7007 afs3-bos AFS 基本监查进程
7008 afs3-update AFS 服务器到服务器更新器
7009 afs3-rmtsys AFS 远程缓存管理器服务

 

一、安装GFS软件包
第一种安装方法是在安装centos时,选择storage clustering组包
第二种方法是用yum 安装:
#yum groupinstall "Cluster Storage" Cluster -y
配置方法稍后给出
二、配置节点cluster文件
node1、node2如下:
root#vim /etc/cluster/cluster.conf
<?xml version="1.0" ?>
<cluster alias="gfs_cluster" config_version="6" name="gfs_cluster">
     <fence_daemon post_fail_delay="0" post_join_delay="3"/>
     <clusternodes>
             <clusternode name="node1" nodeid="1" votes="1">
                     <fence>
                           <method name="1">
                               <device name="manual_fence" nodename="node1"/>
                           </method>
                     </fence>
             </clusternode>
             <clusternode name="node2" nodeid="2" votes="2">
                     <fence>
                           <method name="1">
                               <device name="manual_fence" nodename="node2"/>
                           </method>
                     </fence>
             </clusternode>
        </clusternodes>
        <cman />
        <fencedevices>
                <fencedevice agent="fence_manual" name="manual_fence"/>
        </fencedevices>
        <rm>
                <failoverdomains/>
                <resources/>
        </rm>
</cluster>
三、启动cluster
service cman start
service gfs start
四、格式化GFS文件系统
gfs_mkfs -p lock_dlm -t gfs_cluster:gfs01 -j 4 /dev/sdb9
五、挂载GFS节点
mkdir /gfs
在2台机器上挂载/dev/sdb5到成/ gfs01目录:
mount -t gfs /dev/sdb9 /gfs

inode与文件描述符    http://www.ruanyifeng.com/blog/2011/12/inode.html  http://oss.org.cn/kernel-book/

inode 或i节点是指对文件的索引。如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等。就像书本的目 录一样,便于查找和管理。这目录是操作系统需要的,用来找文件或叫管理文件。许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等。当然,对某个系统来说,有许多i节点。所以对i节点本身也是要进行管理的。
在linux中,内核通过inode来找到每 个文件,但一个文件可以被许多用户同时打开或一个用户同时打开多次。这就有一个问题,如何管理文件的当前位移量,因为可能每个用户打开文件后进行的操作都 不一样,这样文件位移量也不同,当然还有其他的一些问题。所以linux又搞了一个文件描述符(file descriptor)这个东西,来分别为每一个用户服务。每个用户每次打开一个文件,就产生一个文件描述符,多次打开就产生多个文件描述符,一一对应, 不管是同一个用户,还是多个用户。该文件描述符就记录了当前打开的文件的偏移量等数据。所以一个i节点可以有0个或多个文件描述符。多个文件描述符可以对 应一个i节点。

unix下一切皆文件,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。
Unix 操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。
当程序用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务

大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:

    目录项:包括文件名和inode节点号。
    Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。
    数据块:包含文件的具体内容。

inode包含文件的元信息,具体来说有以下内容:

    文件的字节数。
    文件拥有者的User ID。
    文件的Group ID。
    文件的读、写、执行权限。
    文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
    链接数,即有多少文件名指向这个inode。
    文件数据block的位置。
可以用stat命令,查看某个文件的inode信息:
stat demo.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。

查看每个inode节点的大小:  由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

[root@250-shiyan ~]# dumpe2fs -h /dev/sda1 | grep "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size:               128

操作系统只识别inode号

应用程序只识别fd--文件描述符

人识别文件名

内核维护的3个数据结构

进程级的文件描述符表

系统级的打开文件表

文件系统的i-node表

先查看
[root@coreserv ~]# ulimit -n
20480
再修改
[root@coreserv ~]# ulimit -HSn 65536  把ulimit -HSn 65536放到/etc/rc.d/rc.local让启动时加载
增加内核文件描述符的限制
# echo 8192 >; /proc/sys/fs/file-max
增加进程文件描述符的限制
# ulimit -Hn 8192

硬链接和软链接

硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接,语法为:
ln source_file target_file
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
ln -s命令可以创建软链接,语法为:
ln source_file target_file

 

ln命令中,man-pages里说了一些关于ln与ln -s的区别,软硬链接的不同点

ln *source *target 默认产生一个硬链接,
ln -s *source *target 加上参数-s,建立软链接

1、软链接可以跨文件系统,比如你要链接一个windows共享文件夹下的某文件至linux里,软链接可以,而硬链接不行,硬的只能在一个分区里
2、inode节点问题,硬的不管有多少个,均指向一个inode,每创建一个硬链接,会产生一个(大小、权限、inode、时间)一致的文件,并增加1个链接数,它们是绝对平等的,可以通过ls -il命令查看详细的inode和连接数。
软链接,是产生一个很小的具有新inode的文件,有点类似win中的“快捷方式”,它存放的是指向源文件路径的指针,是个全新的文件
删除一个硬链接,只会减少连接数,直到删除最后一个连接数为1的文件,就是彻底删除了此文件
删除一个软链接文件,无区别。删除源文件的话,软连接则指向了一个空文件
3、软的可以链接目录,而硬的不行
一般我们都是采用软链接的方式给文件链接,因为可以跨分区和文件系统
还有个值得注意的是,不管是修改软链接还是硬链接文件,所有的文件都是同步修改的,这是软硬的共性

 

http://www.tuicool.com/articles/fiAjIz  多角度分析为什么 Linux 的硬连接不能指向目录

 

[root@passport httpsstatic]# ln aa aa3
ln: `aa': hard link not allowed for directory
软的可以链接目录,而硬的不行

下面这样的话可以做目录的链接
[root@passport httpsstatic]# ll aa
total 8
-rw-r--r--. 2 root root 11 Apr 12 15:12 cs1.txt
-rw-r--r--. 1 root root 31 Apr 12 15:12 tt.txt
[root@passport httpsstatic]# mkdir bb
[root@passport httpsstatic]# mount -o bind aa bb

[root@passport httpsstatic]# cd bb
[root@passport bb]# ll
total 8
-rw-r--r--. 2 root root 11 Apr 12 15:12 cs1.txt
-rw-r--r--. 1 root root 31 Apr 12 15:12 tt.txt

通过mount可以看出是bind这个参数起作用,
[root@passport httpsstatic]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.1.104:/usr/local/httpsstatic/arcgis_js_api on /usr/local/tomcat-web/webapps/supplier/arcgis_js_api type nfs (rw,vers=4,addr=192.168.1.104,clientaddr=192.168.1.104)
/usr/local/httpsstatic/aa on /usr/local/httpsstatic/bb type none (rw,bind)

这样就不用nfs了。删除的话,先卸载,再删除
[root@passport httpsstatic]# rm -rf bb
rm: cannot remove `bb': Device or resource busy
[root@passport httpsstatic]# umount bb
[root@passport httpsstatic]# rm -rf bb

 

 

inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

实际问题
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
查找原因:
  /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案:
  1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
  2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
  ln -s /opt/newcache /data/cache

 


http://www.blogjava.net/sk8boy/articles/49265.html    使用虚拟内存(virtual memory,VM)文件系统和绑定安装(转自ajing的博客)

文件系统驻留在磁盘之上,或者驻留在内存中

内存文件系统使用及示例:ramdisk, ramfs, tmpfs。在Linux中可以将一部分内存mount为分区来使用,通常称之为RamDisk。

RamDisk有三种实现方式:
第一种就是传统意义上的,可以格式化,然后加载。这在Linux内核2.0/2.2就已经支持,其不足之处是大小固定,之后不能改变。
另两种则是内核2.4才支持的,通过Ramfs或者Tmpfs来实现:
它们不需经过格式化,用起来灵活,其大小随所需要的空间而增加或减少。

为了能够使用Ramdisk,我们在编译内核时须将block device中的Ramdisk支持选上,它下面还有两个选项,一个是设定Ramdisk的大小,默认是4096k;另一个是initrd的支持。
如果对Ramdisk的支持已经编译进内核,我们就可以使用它了:
查看一下可用的RamDisk,使用ls /dev/ram*
首先创建一个目录,比如test,运行mkdir /mnt/test;
然后对/dev/ram0 创建文件系统,运行mke2fs /dev/ram0;
最后挂载 /dev/ram0,运行mount /dev/ram /mnt/test,就可以象对普通硬盘一样对它进行操作了。
ramdisk,使用前需要先创建文件系统,并且调整文件系统大小比较麻烦,需要修改内核引导参数并重新启动操作系统,在繁杂多变的应用与需要 7X24不间断运行的系统来说,并不是一个可以接受的选择.好处是自2.0版本起内核便支持(这也算好处?嗯,确实算,如果你手头真有这样的系统的话)

Ramfs顾名思义是内存文件系统,它处于虚拟文件系统(VFS)层,
它无需格式化,可以创建多个,只要内存足够,在创建时可以指定其最大能使用的内存大小。
如果你的Linux已经将Ramfs编译进内核,你就可以很容易地使用Ramfs了。创建一个目录,加载Ramfs到该目录即可:
# mkdir  /testRam
# mount -t ramfs none /testRAM
缺省情况下,Ramfs被限制最多可使用内存大小的一半。可以通过maxsize(以kbyte为单位)选项来改变。
# mount -t ramfs none /testRAM -o maxsize=2000 (创建了一个限定最大使用内存为2M的ramdisk)
ramfs,使用前不需要去创建文件系统了,直接通过mount的方式即可挂载上来用,需要的时候可以使用"mount -o remount,maxsize=..."这种方式来调整大小.

Tmpfs是一个虚拟内存文件系统,它不同于传统的用块设备形式来实现的Ramdisk,也不同于针对物理内存的Ramfs。
如果我必须一下子说清楚 tmpfs,我会说 tmpfs 就象虚拟磁盘(ramdisk),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。
Tmpfs可以使用物理内存,也可以使用交换分区。
在Linux内核中,虚拟内存资源由物理内存(RAM)和交换分区组成,这些资源是由内核中的虚拟内存子系统来负责分配和管理。
Linux 内核的虚拟内存资源同时来源于您的 RAM 和交换分区。内核中的 VM 子系统将这些资源分配到系统中的其它部分,并负责在后台管理这些资源,通常是透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页。
Tmpfs向虚拟内存子系统请求页来存储文件,它同Linux的其它请求页的部分一样,不知道分配给自己的页是在内存中还是在交换分区中。同Ramfs一样,其大小也不是固定的,而是随着所需要的空间而动态的增减。
使用tmpfs,首先你编译内核时得选择"虚拟内存文件系统支持(Virtual memory filesystem support)" 。
然后就可以加载tmpfs文件系统了:
# mkdir -p /mnt/tmpfs
# mount tmpfs /mnt/tmpfs -t tmpfs
同样可以在加载时指定tmpfs文件系统大小的最大限制:
# mount tmpfs /mnt/tmpfs -t tmpfs -o size=32m
tmpfs,同ramfs在表面上基本上一样啦,不同于ramfs针对"物理内存",tmpfs是在虚拟内存下分配空间的,也就是说tmpfs实例中存储的文件既可能存在于物理内存中,也可能存在于交换分区中,具体存在哪里,是由"虚拟内存子系统"来调度的.
0,根据需要创建挂载目录,例:
mkdir -p $DIR_TMP;
1,挂载
mount my_tmpfs $DIR_TMP -t tmpfs -o size=512m
my_tmpfs这个名字需要起,一个标识而已,会出现在df 的Filesytem一列,起个别致点的名字比较容易被自己写的其它监控脚本找到,如果非要起个none或tmpfs之类的名字的话...反正系统默认挂载的tmpfs都比较喜欢用这两个名字,好坏自己琢磨吧.
成功以后自己用df 看一下就知道了,写监控脚本时可以用"df -t tmpfs|grep ^my_tmpfs"来找到这一行.
2,调整
应用中如果感觉不合适,随时可以用mount命令调整
mount $DIR_TMP -o remount,size=1024m,nr_inodes=100k
nr_inodes为最大节点数,如果你的$DIR_TMP使用df命令查看明明有空间,却无法创建新文件(例如touch一个新文件),可能是文件节点用到上限了,可以用"df -i"命令来查看,如果是有空间但节点达到上限,就需要用nr_inodes来调整了.
其它可以调整的参数:
mode,uid,gid,uid和gid就不多说了,不知道的回家补基础,mode也不多说了,取值是3个八进制数字,表示许可权限,不知道这个的也回家...
其它参数,参见mount命令的man page之OPTIONS一节中"-o"参数的说明.
3,卸载
umount $DIR_TMP
4,其它
mount 命令的man page中对tmpfs提及不多,详细一些的文档,请参阅内核文档Documentation/filesystems/tmpfs.txt(内核源代码目录内)

posted on 2014-04-23 20:57  阳光-源泉  阅读(6590)  评论(0编辑  收藏  举报

导航