资源描述
文件组织及管理
1. 文件及文件系统的定义
一个文件是数据的集合体,而文件系统是文件和目录的集合,它通常是按磁盘划分的。一个文件一定属于一个文件系统,一个文件系统一定对应着相应磁盘,这个磁盘可以是一块物理硬盘的一部分,也可以是单独的一块物理硬盘,还可以是几块物理硬盘绑定,文件系统的分配是随需要而改变的,但系统一旦生成这种结构就相对比较稳定。
e10k:[wqwq]% df
/ (/dev/dsk/c2t0d0s0 ): 1278512 blocks 409350 files
/proc (/proc ): 0 blocks 29669 files
/dev/fd (fd ): 0 blocks 0 files
/etc/mnttab (mnttab ): 0 blocks 0 files
/var/run (swap ):120999056 blocks 3510504 files
/tmp (swap ):120999056 blocks 3510504 files
/e10kstg1 (/dev/vx/dsk/e45h72g3/vol11):240940306 blocks 43885850 files
/e10kstg4 (/dev/vx/dsk/data7/vol01):92213514 blocks 35106439 files
/e10kstg5 (/dev/vx/dsk/D72G1/vol01):118222520 blocks 52666174 files
/e10kstg6 (/dev/vx/dsk/e4500stg3/vol01):47745344 blocks 41827853 files
/e10kstg7 (/dev/vx/dsk/s5x70r0/vol01):71443464 blocks 167976366 files
/e10kstg8 (/dev/dsk/c10t5d1s2):83633238 blocks 43203816 files
/e10kstg9 (/dev/dsk/c10t5d0s2):99615724 blocks 126671090 files
/e10kscr1 (/dev/vx/dsk/data/vol01):124206748 blocks 33122700 files
/e10kstg11 (/dev/vx/dsk/180gbox2/vol01):697790498 blocks 130245996 files
/e10kstg10 (/dev/vx/dsk/180gbox1/vol01):502430666 blocks 130244919 files
/e10kscr6 (/dev/vx/dsk/idata1/vol01):266543860 blocks 82859747 files
/e10kscr3 (/dev/vx/dsk/data2/vol01):181851556 blocks 11906886 files
/e10kscr2 (/dev/vx/dsk/d18x13sgi/vol01):209909370 blocks 13055889 files
/e10kscr7 (/dev/vx/dsk/d18x13sgi/vol02):212880002 blocks 15236193 files
e10k:[wqwq]%
2.文件系统类型
2.1磁盘文件系统
三种磁盘文件系统类型:
ufs – UNIX文件系统。是Solaris缺省的文件系统。
例如:
/dev/vx/dsk/data/vol01 /dev/vx/rdsk/data/vol01 /e10kscr1 ufs 0 no -
/dev/vx/dsk/d18x13sgi/vol01 /dev/vx/rdsk/d18x13sgi/vol01 /e10kscr2 ufs 0 no -
/dev/vx/dsk/data2/vol01 /dev/vx/rdsk/data2/vol01 /e10kscr3 ufs 0 no -
/dev/vx/dsk/e4500stg1/vol01 /dev/vx/rdsk/e4500stg1/vol01 /e10kscr4 ufs 0 no -
hsfs – 高密度CD-ROM文件系统,是只读文件系统。
pcfs – PC文件系统,支持DOS格式化的软盘。
2.2网络文件系统
NFS是Solaris系统支持的网络文件系统。
例如:
e10k:/remote/home - /export/home nfs - yes -
e10k:/remote/proj - /proj nfs - yes -
e10k:/prog/gct - /gct nfs - yes -
e10k:/e10kscr1/spool1 - /spool1 nfs - yes -
2.3内存文件系统
指操作系统运行时存在于内存中的文件系统。
例如:
/proc (/proc ): 0 blocks 15959 files
/dev/fd (fd ): 0 blocks 0 files
由于内存文件系统是使用内存来模拟磁盘操作,因此数据都是在内存之间传输,就可以得到比较高的读写性能。当然,使用内存文件系统,一旦系统重新启动,所有的内容也就不再存在了,因此只能用来保存临时性的数据。
proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
例如:
[root@lin002 proc]# ls
1 197 773 793 812 832 852 872 892 driver mtrr
10 2 774 794 813 833 853 873 893 execdomains net
102 21 775 795 814 834 854 874 894 fb partitions
1028 23343 776 796 815 835 855 875 895 filesystems pci
1038 23346 777 797 816 836 856 876 896 fs scsi
1040 23349 778 798 817 837 857 877 897 ide self
1055 23360 779 799 818 838 858 878 898 interrupts slabinfo
1060 3 780 8 819 839 859 879 899 iomem stat
1069 4 781 800 820 840 860 880 9 ioports swaps
1070 4382 782 801 821 841 861 881 900 irq sys
1071 5 783 802 822 842 862 882 901 kcore sysvipc
1072 532 784 803 823 843 863 883 902 kmsg tty
1073 537 785 804 824 844 864 884 920 ksyms uptime
16 557 786 805 825 845 865 885 938 loadavg version
16370 6 787 806 826 846 866 886 992 locks
16371 603 788 807 827 847 867 887 bus mdstat
16372 7 789 808 828 848 868 888 cmdline meminfo
16413 721 790 809 829 849 869 889 cpuinfo misc
18 763 791 810 830 850 870 890 devices modules
196 768 792 811 831 851 871 891 dma mounts
文件或目录含义如下:
apm 高级电源管理信息 cmdline 内核命令行
cpuinfo 关于Cpu信息 devices 可以用到的设备(块设备/字符设备)
dma Used DMS channels filesystems 支持的文件系统
interrupts 中断的使用 ioports I/O端口的使用
kcore 内核核心印象 kmsg 内核消息
ksyms 内核符号表 loadavg 负载均衡
locks 内核锁 leminfo 内存信息
isc Miscellaneous modules 加载模块列表
mounts 加载的文件系统 partitions 系统识别的分区表
rtc Real time clock slabinfo Slab pool info
stat 全面统计状态表 swaps 对换空间的利用情况
version 内核版本 uptime 系统正常运行时间
并不是所有这些文件或目录在你的系统中都有,这取决于你的UNIX系统及内核配置和装载的模块。Solaris系统/proc下只有以进程的PID号命名的目录文件,linux 下/proc中有三个很重要的目录:net,scsi和sys。sys目录是可写的,可以通过它来访问或修改内核的参数(见下一部分),而net和scsi则依赖于内核配置,如果系统不支持scsi,则scsi目录不存在。
#cat /proc/scsi/scsi
Attached devices:
Host: scsi1 Channel: 00 Id: 02 Lun: 00
Vendor: IBM Model: 03590B1A Rev: A57E
Type: Sequential-Access ANSI SCSI revision: 03
Host: scsi1 Channel: 00 Id: 03 Lun: 00
Vendor: IBM Model: 03590B11 Rev: B6CB
Type: Sequential-Access ANSI SCSI revision: 02
Host: scsi5 Channel: 00 Id: 00 Lun: 00
Vendor: MegaRAID Model: LD0 RAID0 69878R Rev: 161J
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi5 Channel: 00 Id: 01 Lun: 00
Vendor: MegaRAID Model: LD1 RAID0 69878R Rev: 161J
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi5 Channel: 04 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x8 SCSI BP Rev: 1.1
Type: Processor ANSI SCSI revision: 02
Host: scsi6 Channel: 00 Id: 00 Lun: 00
Vendor: MegaRAID Model: LD 0 RAID5 908G Rev: 1.74
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi6 Channel: 04 Id: 06 Lun: 00
Vendor: DELL Model: PV22XS Rev: E.10
Type: Processor ANSI SCSI revision: 03
Host: scsi7 Channel: 00 Id: 00 Lun: 00
Vendor: MegaRAID Model: LD 0 RAID0 139G Rev: 1.72
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi7 Channel: 00 Id: 01 Lun: 00
Vendor: MegaRAID Model: LD 1 RAID5 768G Rev: 1.72
Type: Direct-Access ANSI SCSI revision: 02
Host: scsi7 Channel: 00 Id: 02 Lun: 00
Vendor: MegaRAID Model: LD 2 RAID5 908G Rev: 1.72
Type: Direct-Access ANSI SCSI revision: 02
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个/proc下目录,以进程的PID号为目录名,它们是读取进程信息的接口。而self目录则是读取自身进程的信息接口,是一个link。
/proc下的进程目录,实际上对应的是内存作业分配表,它们会因不同的unix系统而有差异,但同一系统它们结构是一样的。
例如linux:
[root@pca011 803]# ls
cmdline cwd exe maps mounts stat status
cpu environ fd mem root statm
[root@pca011 803]# cd ../775
[root@pca011 775]# ls
cmdline cwd exe maps mounts stat status
cpu environ fd mem root statm
803和775目录下的文件是一样的。
Solaris:
ultra60b# cd 1
ultra60b# ls
as ctl lpsinfo lwp pagedata root usage
auxv cwd lstatus map psinfo sigact watch
cred fd lusage object rmap status xmap
ultra60b# cd ../184
ultra60b# ls
as ctl lpsinfo lwp pagedata root usage
auxv cwd lstatus map psinfo sigact watch
cred fd lusage object rmap status xmap
linux下/proc/self目录是读取自身进程的信息接口,因此是随进程而变化的,例如:
lin3[wqwq]% ls -l self
lrwxrwxrwx 1 root root 64 Apr 26 14:02 self -> 18830
lin3[wqwq]% ls -l self
lrwxrwxrwx 1 root root 64 Apr 26 14:02 self -> 18831
lin3[wqwq]% ls -l self
lrwxrwxrwx 1 root root 64 Apr 26 14:02 self -> 18832
lin3[wqwq]% ls -l self
lrwxrwxrwx 1 root root 64 Apr 26 14:02 self -> 18833
我们看到self的link是变动的,这是因为每执行一条命令,实际上是启动一个进程,而系统会给每个进程分配一个PID号。
linux进程目录的结构:
目录名称 目录内容
cmdline 命令行参数
environ 环境变量值
fd 一个包含所有文件描述符的目录
mem 进程的内存被利用情况
stat 进程状态
status 以可读方式给出进程状态
cwd 当前工作目录的链接
exe 连接到当前的shell
maps 内存印象
statm 进程内存状态信息
root 链接此进程的root目录
在/proc文件系统中有一个值得注意的目录:/proc/sys。它不仅提供了内核信息,而且可以通过它修改内核参数,来优化你的系统。但是你必须很小心,因为可能会造成系统崩溃。最好是先找一台无关紧要的机子,调试成功后再应用到你的系统上。
要改变内核的参数,只要用vi编辑或echo参数重定向到文件中即可。下面有一个例子:
# cat /proc/sys/fs/file-max
4096
# echo 8192 > /proc/sys/fs/file-max
# cat /proc/sys/fs/file-max
8192
这样修改只是暂时的,系统启动后又恢复原值,如果你优化了参数,并永久修改,则可以把它们写成脚本(命令)文件,使它在系统启动时自动完成修改。
2.4 流分区与块分区等概念
流分区已经定义了分区的大小和位置,但未创建文件系统。流分区是使用format命令
产生的。
块分区已经创建了文件系统。块分区是使用newfs命令产生的
它们之间的逻辑设备名分别存放在/dev/rdsk河/dev/dsk中。
磁盘卷标包含了磁盘的分区表。磁盘卷标存放在磁盘的第一个扇区。它是由format命令产生的。
启动块存放着启动程序。位于磁盘的1-15扇区。是用installboot命令产生的。
超级块包含启动块后面的16个扇区。超级块是文件系统的信息表,是由newfs产生的。
由于超级块包含了许多关键数据,因此,必须要备份。备份是在文件系统创建时产生的。
2.5 文件系统操作命令
2.5.1 产生ufs文件系统
newfs /vol/dev/aliases/floppy0
newfs: construct a new file system /vol/dev/aliases/floppy0: (y/n)? y
/vol/dev/aliases/floppy0: 2880 sectors in 80 cylinders of 2 tracks,
18 sectors 1.4MB in 5 cyl groups (16 c/g, 0.28MB/g, 128 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 640, 1184, 1792, 2336, ...
如果你产生的文件系统空间较大,那么你应考虑使用-m参数,这个参数是定义系统预留空间的,缺省为10%,也就是说如果你不指定-m参数,用户盘最多能使用到90%.
2.5.2 安装文件系统
文件系统按照5.1的做法已经产生,但还不能使用,你必须将其挂接到一个目录上,既挂接点(mount 点)上:
mkdir /mount1
mount /dev/rdsk/c0t0d0s6 /mount1
如果是用户盘,按要求用chmod命令将许可放开,如chmod 777 /mount1
但一定要在mount以后再改许可,这样就不会因为因磁盘故障,而将用户数据写入/文件系统中,造成系统盘满的严重后果,
看一个例子:
查看文件系统:
ultra60b# df
/ (/dev/dsk/c0t0d0s0 ): 2370720 blocks 540175 files
/proc (/proc ): 0 blocks 15857 files
/dev/fd (fd ): 0 blocks 0 files
/etc/mnttab (mnttab ): 0 blocks 0 files
/var/run (swap ): 5718160 blocks 108970 files
/tmp (swap ): 5718160 blocks 108970 files
/prog (/dev/dsk/c0t0d0s2 ): 857404 blocks 338174 files
/disk1 (/dev/dsk/c3t8d0s2 ):244702470 blocks 16968163 files
列出文件系统/disk1的相关文件属性:
ultra60b# ls -ld /disk1
drwxrwxrwx 8 root root 512 Sep 24 09:54 /disk1
ultra60b# ls -ld /dev/dsk/c3t8d0s2
lrwxrwxrwx 1 root root 41 Jan 2 2004 /dev/dsk/c3t8d0s2 -> ../../devices/pci@1f,4000/scsi@4/sd@8,0:c
ultra60b# ls -ld /devices/pci@1f,4000/scsi@4/sd@8,0:c
brw-r----- 1 root sys 32,538 Sep 2 10:21 /devices/pci@1f,4000/scsi@4/sd@8,0:c
在文件系统/disk1使用时,/disk1与/dev/dsk/c3t8d0s2的读写属性是一样的,与
/devices/pci@1f,4000/scsi@4/sd@8,0:c无关。
现在我们umount /disk1
ultra60b# umount /disk1
ultra60b# ls -ld /dev/dsk/c3t8d0s2
ultra60b# ls -ld /disk1
drwxr-xr-x 2 root root 512 Sep 2 10:14 /disk1
lrwxrwxrwx 1 root root 41 Jan 2 2004 /dev/dsk/c3t8d0s2 -> ../../devices/pci@1f,4000/scsi@4/sd@8,0:c
ultra60b# ls -ld /devices/pci@1f,4000/scsi@4/sd@8,0:c
brw-r----- 1 root sys 32,538 Sep 2 10:21 /devices/pci@1f,4000/scsi@4/sd@8,0:c
从这两个例子中我们得到了什么结论?很明显:
a. /disk1如果对应的是一个文件系统,它的读写性与逻辑设备的属性一致,与/disk1的原属性无关。
b. 物理设备的读写属性不影响逻辑设备的读写性。
c. 改变一个文件系统的读写性,实际上是改变了逻辑设备的读写性,当
mount点不再对应一个文件系统时,mount点的读写属性又恢复到原始状态。
2.5.3 /etc/vfstab文件
上述方法挂接的文件系统存在一个问题,就是下次系统启动后文件系统不能自动挂接,为了解决该问题,应将新定义的文件系统写入/etc/vfstab文件中.
/etc/vfstab文件:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c2t0d0s1 - - swap - no -
/dev/dsk/c2t2d0s2 - - swap - no -
swap - /tmp tmpfs - yes -
/dev/dsk/c2t0d0s0 /dev/rdsk/c2t0d0s0 / ufs 1 no -
/dev/vx/dsk/data/vol01 /dev/vx/rdsk/data/vol01 /e10kscr1 ufs 0 yes -
/dev/dsk/c23t5d0s2 /dev/rdsk/c23t5d0s2 /e10kscr5 ufs 0 yes -
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /mount1 ufs 0 yes -
2.5.4 NFS文件系统
2.5.4.1 基本概念
NFS
即网络文件系统,是UNIX系统共享文件的协议。
NFS服务器:
提供网络共享资源的系统,可以是一台计算机,也可以是几台计算机,一台计算机既可以是服务器又可以是客户端。
NFS客户:
使用网络共享资源的系统
2.5.4.2 原理
NFS安装守护进程
当客户要安装一个网络共享系统资源时,NFS安装守护进程(/usr/lib/nfs/mountd)负责这个系统的安装。并将安装信息写到/etc/mnttab文件中。一旦客户完成NFS安装,服务器中的/etc/rmtab文件中会写入安装信息。当客户卸载了NFS共享资源后,这些信息就会从文件中删除。
以e10k、b2k系统为例:
e10k、b2k既是服务器又是客户端,互相使用对方的网络共享资源,b2k使用e10k资源:
e10k:/remote/home 16573356 14108829 2298794 86% /export/home
e10k:/spool1 87461924 15452198 71135107 18% /spool1
e10k:/prog/gct 16573356 13250063 1665958 89% /gct
e10k:/veldata 357285209 353436699 275658 100% /veldata
e10k:/proj 16573356 10978572 5429051 67% /proj
e10k使用的b2k的资源:
b2000:/scr 288351351 38698707 246769131 14% /b2kscr
e10k系统/etc/mnttab、/etc/rmtab文件部分内容如下:
e10k:[wqwq]% cat /etc/mnttab | grep b2k
b2000:/scr /b2kscr nfs rw,dev=4300001 1082252205
e10k:[wqwq]% grep b2000 /etc/rmtab
b2000:/e10kstg8/veldata
b2000:/e10kscr2/spool1
b2000:/export/proj
b2000:/export/home
b2000:/prog/gct
e10k:[wqwq]% ls -l /veldata
lrwxrwxrwx 1 root geovect 17 Apr 12 12:00 /veldata ->/e10kstg8/veldata
e10k:[wqwq]% ls -l /spool1
lrwxrwxrwx 1 root geovect 16 Apr 9 10:46 /spool1 -> /e10kscr2/spool1
NFS 服务器守护进程
当客户试图访问远程共享资源时,NFS服务器的守护进程(/usr/lib/nfs/nfsd)响应请求并返回数据。服务器守护进程由/etc/init.d/nfs.server产生。如果/etc/dfs/dfstab文件中有共享条目,这些共享目录会在守护进程启动时自动共享。
客户端NFS 守护进程
客户端有两个守护进程,/usr/lib/nfs/statd和/usr/lib/nfs/lockd。这些进程在系统启动时自动运行。
e10k:[wqwq]% cat /etc/dfs/dfstab
# Place share(1M) commands here for automatic execution
# on entering init state 3.
#
# Issue the command '/etc/init.d/nfs.server start' to run the NFS
# daemon processes and the share commands, after adding the very
# first entry to this file.
#
# share [-F fstype] [ -o options] [-d "<text>"] <pathname> [resource]
# .e.g,
# share -F nfs -o rw=engineering -d "home dirs" /export/home2
# share -F nfs -o rw,root=sparc2 /dev/Exa3
# share -F nfs -o rw,root=ultra60b /dev/8mmL1
# share -F nfs -o rw,root=ultra60b /dev/8mmL2
share -F nfs -o rw,root=dell4:bl2000 /veldata
……
share -F nfs -o rw,root=ultra60b:bl2000:u60a:u60c:dell4:dell2 /proj
share -F nfs -o rw,root=ultra60b:bl2000:u60a:u60c:dell4:dell2 /prog/gct
share -F nfs -o rw,root=ultra60a:b2000 /spool1
share -F nfs -o rw,root=dell2 /e10kstg19
参数
-F FSType 指定文件系统的类型。如果/etc/dfs/fstypes文件中缺省的远程文件类型是NFS
展开阅读全文