linux概念之分区与文件系统

Linux系统分区概念

2015年05月19日 15:26:01 阅读数:4660 标签: Linux 系统分区 更多

个人分类: Linux

       在学习 Linux 的过程中,安装 Linux 是每一个初学者的第一个门槛。在这个过程中间,最大的困惑莫过于给硬盘进行分区。虽然,现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多的人还是感觉无从下手。这其中的原因主要是不清楚 Linux 的分区规定,以及它下面最有效的分区工具― Fdisk 的使用方法。

       首先我们要对硬盘分区的基本概念进行一些初步的了解,硬盘的分区主要分为基本分区(primary partion)和扩充分区(extension partion)两种基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩充分区再分下去的是什么呢?它就是逻辑分区(logical partion),况且逻辑分区没有数量上限制。

       对习惯于使用dos或windows的用户来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在 这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。但对这些初上手 red hat linux的用户,可就有点恼人了。因为对red hat linux用户来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。red hat linux中每个分区都是用来组成整个文件系统的一部分,因为它采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个 分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

       对windows用户来说,操作系统必须装在同一分区里,它是商业软件! 所以你没有选择的余地!对red hat linux来说,你有了较大的选择余地,你可以把系统文件分几个区来装(必须要说明载入点),也可以就装在同一个分区中(载入点是“/”)。

下面从这两个方面入手,来讲解这个困扰大家的问题。

Linux 的分区规定

1. 设备管理  

       在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux 把各种 IDE 设备分配了一个由 hd 前缀组成的文件;而对于各种 SCSI 设备,则分配了一个由 sd 前缀组成的文件。

       对于ide硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指ide硬盘了。“x”为盘号(a为基本盘,b为基本从 属盘,c为辅助主盘,d为辅助从属盘),“~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示 为第一个ide硬盘上的第三个主分区或扩展分区,hdb2表示为第二个ide硬盘上的第二个主分区或扩展分区。对于scsi硬盘则标识为 “sdx~”,scsi硬盘是用“sd”来表示分区所在设备的类型的,其余则和ide硬盘的表示方法一样,不在多说。

       例如,第一个 IDE 设备,Linux 就定义为 hda;第二个 IDE 设备就定义为 hdb;下面以此类推。而 SCSI 设备就应该是 sda、sdb、sdc 等。

2. 分区数量   

       要进行分区就必须针对每一个硬件设备进行操作,这就有可能是一块IDE硬盘或是一块SCSI硬盘。对于每一个硬盘(IDE 或 SCSI)设备,Linux 分配了一个 1 到 16 的序列号码,这就代表了这块硬盘上面的分区号码。
  例如,第一个 IDE 硬盘的第一个分区,在 Linux 下面映射的就是 hda1,第二个分区就称作是 hda2。对于 SCSI 硬盘则是 sda1、sdb1 等。

3. 各分区的作用    

       在 Linux 中规定,每一个硬盘设备最多能有 4个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是 4 个。
  对于早期的 DOS 和 Windows(Windows 2000 以前的版本),系统只承认一个主分区,可以通过在扩展分区上增加逻辑盘符(逻辑分区)的方法,进一步地细化分区。

       主分区的作用就是计算机用来进行启动操作系统的,因此每一个操作系统的启动,或者称作是引导程序,都应该存放在主分区上。

       这就是主分区和扩展分区及逻辑分区的最大区别。  

       我们在指定安装引导 Linux 的 bootloader 的时候,都要指定在主分区上,就是最好的例证。Linux 规定了主分区(或者扩展分区)占用 1 至 16 号码中的前 4 个号码。以第一个 IDE 硬盘为例说明,主分区(或者扩展分区)占用了 hda1、hda2、hda3、hda4,而逻辑分区占用了 hda5 到 hda16 等 12 个号码。因此,Linux 下面每一个硬盘总共最多有 16 个分区。对于逻辑分区,Linux 规定它们必须建立在扩展分区上(在 DOS 和 Windows 系统上也是如此规定),而不是主分区上。
  因此,我们可以看到扩展分区能够提供更加灵活的分区模式,但不能用来作为 操作系统 的引导。 除去上面这些各种分区的差别,我们就可以简单地把它们一视同仁了。

4. 分区指标  

       对于每一个 Linux 分区来讲,分区的大小和分区的类型是最主要的指标。容量的大小读者很容易理解,但是分区的类型就不是那么容易接受了。分区的类型规定了这个分区上面的文件系统的格式。
  Linux 支持多种的文件系统格式,其中包含了我们熟悉的FAT32、FAT16、NTFS、HP-UX,以及各种 Linux 特有的 Linux Native和 Linux Swap分区类型。
  在 Linux 系统中,可以通过分区类型号码来区别这些不同类型的分区。各种类型号码在介绍Fdisk的使用方式的时候将会介绍。

5  常用分区

/boot分区,它包含了操作系统的内核和在启动系统过程中所要用到的文件,建这个 分区是有必要的,因为目前大多数的pc机要受到bios的限制,况且如果有了一个单独的/boot启动分区,即使主要的根分区出现了问题,计算机依然能够 启动。这个分区的大小约在50mb—100mb之间。但是如果想用lilo启动red hat linux系统的话,含有/boot的分区必须完全在柱面1023以下。又由于8gb后的数据lilo不能读取,所以red hat linux要安装在8gb的区域以内。

/usr分区,是red hat linux系统存放软件的地方,如有可能应将最大空间分给它。

/home分区,是用户的home目录所在地,这个分区的大小取决于有多少用户。如 果是多用户共同使用一台电脑的话,这个分区是完全有必要的,况且根用户也可以很好地控制普通用户使用计算机,如对用户或者用户组实行硬盘限量使用,限制普 通用户访问哪些文件等。其实单用户也有建立这个分区的必要,因为没这个分区的话,那么你只能以根用户的身份登陆系统,这样做是危险的,因为根用户对系统有 绝对的使用权,可一旦你对系统进行了误操作,麻烦也就来了。

/var/log分区,是系统日志记录分区,如果设立了这一单独的分区,这样即使系统的日志文件出现了问题,它们也不会影响到操作系统的主分区。

/tmp分区,用来存放临时文件。这对于多用户系统或者网络服务器来说是有必要的。 这样即使程序运行时生成大量的临时文件,或者用户对系统进行了错误的操作,文件系统的其它部分仍然是安全的。因为文件系统的这一部分仍然还承受着读写操 作,所以它通常会比其它的部分更快地发生问题。

/bin分区,存放标准系统实用程序。

/dev分区,存放设备文件。

/opt分区,存放可选的安装的软件。

/sbin分区,存放标准系统管理文件。

        上面介绍了几个常用的分区,一般来说我们需要一个swap分区,一个/boot分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这没有什么规定,完全是依照你个人来定的。但记住至少要有两个分区,一个swap分区,一个/分区。

 

Fdisk 使用详解

       下面通过介绍 Fdisk 的使用方法,来巩固上面所学到的各种关于 Linux 分区的知识。Fdisk 是各种 Linux 发行版本中最常用的分区工具,是被定义为 Expert 级别的分区工具,它让初学者有点望而却步。

1. Fdisk 参数说明
        运行Fdisk的时候,首先映入眼帘的是欢迎界面,用户通过在这个界面中输入命令参数来操作Fdisk。用户通过提示键入 “m”,可以显示 Fdisk 命令各个参数的说明。 读者可以看到 Fdisk 有很多参数,可是经常使用的就是几个,如果读者熟练掌握这几个参数就可以流畅地运用 Fdisk,对 Linux 的硬盘进行分区。我们先简单介绍各个参数的意义,然后详细说明几个重点参数。用户在 Linux 中进行分区的时候,最常用的参数分别是 d、l、m、n、p、q、t、w 等。

2.用 Fdisk 进行分区

       在 Linux 分区过程,一般是先通过 p 参数来显示出硬盘分区表信息,然后根据信息确定将来的分区如果想完全改变硬盘的分区格式,就可以通过 d 参数一个个删除存在的硬盘分区。

       例如 d1,d2。 删除完毕,就可以通过 n 参数来增加新的分区。当按下 “n” 后,我们就可以看到新增的分区。这里要选择新建的分区类型,是主分区还是扩展分区;

       然后选择 p 或是 e。它们的区别在上文中已经说明。然后就是设置分区的大小。需要提醒注意的是,如果硬盘上有扩展分区,就只能增加逻辑分区,不能增加扩展分区了,在增加分 区的时候,其类型都是默认的 Linux Native,如果需要把其中的某些分区改变为其它类型,例如 Linux Swap 或 FAT32 等,可以通过命令 t 来改变, 当按下 “t” 改变分区类型的时候,系统会提示要改变哪个分区,并且改变为什么类型(如果想知道系统所支持的分区类型,键入 l)。Linux 所支持的分区类型号码和其对应的分区类型,可以参考表 2(这些信息可以用 l 命令得到)。改变完了分区类型,就可以按下 “w”,保存并且退出。如果不想保存,那么可以选择 “q” 直接退出。

        fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;参数 -l ,通过-l 参数,能获得机器中所有磁盘的个数,也能列出所有磁盘分区情况;

[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         765     6144831    7  HPFS/NTFS
/dev/hda2             766        2805    16386300    c  W95 FAT32 (LBA)
/dev/hda3            2806        7751    39728745    5  Extended
/dev/hda5            2806        3825     8193118+  83  Linux
/dev/hda6            3826        5100    10241406   83  Linux
/dev/hda7            5101        5198      787153+  82  Linux swap / Solaris
/dev/hda8            5199        6657    11719386   83  Linux
/dev/hda9            6658        7751     8787523+  83  Linux

       在上面Blocks中,表示的是分区的大小,Blocks的单位是byte ,我们可以换算成M,比如第一个分区/dev/hda1的大小如果换算成M,应该是6144831/1024=6000M,也就是6G左右,其实没有这么 麻烦,粗略的看一下把小数点向前移动三位,就知道大约的体积有多大了;
       System 表示的文件系统,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系统;.

       在此例中,我们要特别注意的是/dev/hda3分区,这是扩展分区;他下面包含着逻辑分区,其实这个分区相当于一个容器;从属于她的有 hda5,hda6,hda7,hda8,hda9 ;

       我们还注意到一点,怎么没有hda4呢?为什么hda4没有包含在扩展分区?一个磁盘最多有四个主分区; hda1-4算都是主分区;hda4不可能包含在扩展分区里,另外扩展分区也算主分区;在本例中,没有hda4这个分区,当然我们可以把其中的一个分区设 置为主分区,只是我当时分区的时候没有这么做而已;

       再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分区的体积,所以我们可以这样算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),换算成M单位,小数点向前移三位,所以目前已经划分好的分区大约占用体积是62259.876(M),其实最精确的计算 62259876/1024=60800.67(M);而这个磁盘大小是80.0 GB (80026361856byte),其实实际大小也就是78150.744(M);通过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大 约还有18G未分区的空间;

我们也可以指定fdisk -l 来查看其中一个硬盘的分区情况;

[root@localhost beinan]# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       57231    58604528   83  Linux

 

通过上面情况可以知道,在/dev/sda 这个磁盘中,只有一个分区;使用量差不多是百分百了;

我们还可以来查看 /dev/hda的

[root@localhost beinan]# fdisk -l /dev/hda

自己试试看?

我们也可以通过: cat /proc/partitions查看目前机器中的所有磁盘及分区情况

 

df 命令;
df 是来自coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

举例:

[root@localhost beinan]# df -lh

Filesystem            容量  已用 可用 已用% 挂载点

/dev/hda8              11G  6.0G  4.4G  58% /

/dev/shm              236M     0  236M   0% /dev/shm

/dev/sda1              56G   22G   35G  39% /mnt/sda1

我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中;

其它的参数请参考 man df

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

分区类型

[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(内核源代码目录内)

  • 8
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,Linux文件系统与设备管理问题讨论,可以针对以下几个方面展开: 1. 文件系统的种类和特点:Linux支持多种文件系统,比如Ext2/Ext3/Ext4、XFS、Btrfs等。不同的文件系统有不同的特点和用途。比如,Ext4是Linux下最成熟、最常用的文件系统,支持最大的文件和分区大小;XFS适合大型文件和高负载的服务器应用;Btrfs支持快照和数据压缩等高级功能。了解这些文件系统的特点,可以根据具体的应用场景选择合适的文件系统。 2. 文件系统的管理和维护:在Linux下,我们可以使用一些工具来管理和维护文件系统,比如fdisk、mkfs、e2fsck、mount等。这些工具可以帮助我们创建、格式化、挂载、卸载和检查文件系统。同时,我们还需要注意文件系统的容量、性能和数据安全等问题,比如需要定期清理垃圾文件、检查磁盘空间、备份重要数据、避免文件碎片等。 3. 设备管理的基本概念:在Linux下,设备可以分为块设备和字符设备。块设备一般是指硬盘、光驱等可以随机访问的设备;字符设备一般是指串口、打印机等需要按照顺序访问的设备。我们可以使用一些命令来管理设备,比如lsblk、fdisk、mkfs等。同时,我们还需要了解设备文件的命名规则,比如/dev/sda、/dev/ttyS0等。 4. 设备驱动程序的开发和调试:在Linux下,设备驱动程序是连接硬件和操作系统的桥梁,我们可以使用C语言等编程语言来开发设备驱动程序。同时,我们还需要掌握一些调试技巧,比如使用printk函数来输出调试信息、使用strace命令来跟踪系统调用、使用gdb调试器来调试程序等。 以上是Linux文件系统与设备管理的一些基本问题和讨论点,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值