问题描述:
希望大家帮帮忙,小菜我有急用啊!
解析:
在核心中安装 quotas
在这个套件中的 diffs 是相对于本来的 1.1.16 版程式码。
执行下面的步骤。
首先为旧的组件建立备份,就像这样。
1) cd /usr/src
2) tar czvhf oldlinux.tar.gz linux
然后解开组件
3) cd /usr/src/linux
4) patch -p1 <<你放置它的地方>/kdiffs_1.1.16
检查看看有没有一些被拒绝执行的地方或者是不是有做一些这样的尝试。
5) find . -name \*.rej
当你完成这个步骤以后我们可以把一些原先的档案丢掉。
6) find . -name \*.orig | xargs rm
下面配置你的核心
7) cd ..
8) make config
在 Disk QUOTA support 选项上回答 yes 。
做一下验证,然后重新制作核心。
9) make depend
10) make
现在你应该已经拥有一个新的核心映像,像平常一样地安装它。
好,现在制作工具程式并且安装它们。
把这个目录下的 mntent.h 档案复制到 /usr/include 以便取代原先那个小的、并且会锁住各种运作选项的那一个。
要使用这个套件里的 PROCESSACCOUNTING DIFFS 你需要有 GNU 的 ACCOUNTING 工具程式,这些工具程式可以在 PREP.AI.MIT.EDU 里找到 )
在档案系统上启动 quotas
要在一个档案系统上启动 quotas 的人应该要编辑 /etc/fstab 这个档案并且为了 usrquota 以及 grpquota 增加一些项目。我的看起来像这样:
# device directory type options
/dev/hda1 / ext2 defaults
/dev/hda2 none swap sw
/dev/hda3 /usr ext2 defaults
/dev/hdb1 /usr/users ext2 defaults,usrquota,grpquota
/dev/hdb2 /usr/src ext2 defaults,usrquota
none /proc proc defaults
在每个 fstab 项目的选项栏位中,关键字 "usrquota" 为这个设备打开使用者的限额功能。在选项栏位里的关键字 "grpquota" 则为这个设备打开使用群的限额功能。当你使用了 usrquota 以及 grpquota 选项而没有加上 "" 选项时,你的 quotafiles 会是在每个档案系统的根目录里。一个叫做 "quota.user" 的档案是给使用者的限额功能所使用;而一个叫做 "quota.group" 的档案则是给使用群的限额功能所使用。
从 1.1 版开始你也能够在里面定义你自己的 quotafile 。就像是 "usrquota/usr/adm/quotasrc.user" 这样的东西。请注意你的 fstab 里每一行的最大长度限制,参看mntent.h 里面的定义。在你真的想要使用这个选项时,你应该用这个套件所提供的mntent.c 链结这些程式,因为程式库在处理一个 fastab 档案的剖析上有些问题。
打开 quotas 的功能
在你第一次安装 quota 时执行 "quotacheck -avug" 来将所有的 quotafiles 安装到你档案系统的根目录。或者是当你以 [usr|grp]quota"" 在定义你的 fstab 时所叙述的地方。当用来检查一个设备时不要用 quotacheck 程式的 -d 旗标。因为这个只有用在除错上而且会使得扫描非常的慢。
quotacheck 这个程式在大型的档案系统上得花些时间,但是新的版本在我的机器上已经很可以接受了。然而当你是在 hacking 核心时,我建议不要去使用它。因为这在你每次必须得重新开机时都会花些时间。你也可以把它放在你的 rc 指令稿里然后就像你在你的档案系统上执行 fsck 一般,只有在 fastreboot 旗标没有被设定的时候才会执行它。
他并没有支援档案系统的 parallel checking ,但是下个版本可能会有。请不要介意自己去实作它。如果没有人要做那我就得自己来,但这样子的话将得多花点时间,因为它现在在我的 wish list 中并不是很重要。而且它在 IDE 磁碟上做 simultaniously大概不会多快。
现在应该已经具备所有必须的 quotafiles 。现在你可以增加像这样一行:
/usr/etc/quotaon -avug(或是不要加上 -v 旗标,如果你并不想看到什么 quota 被打开了的话)。
到你的 /etc/rc 里面去。这是用来在你启动机器时打开 quotas 的功能。这是一个让你不必在每次启动你的机器时都得要自己打开它的办法。
为 quotas 检查档案系统
只要执行 "quotacheck -avug" 那麽 quotafiles 就会自动被更新而且核心正在使用的参考表也一样。注意 quotacheck 程式的 "updating in core quotas" 讯息,如果它更新核心的 quotas 就会出现。
quotafile 是以 (uid || gid * sizeof(struct dquot))这种方式建立的,所以当你没有 uid以及用户nobody拥有一个档案时会得到很大的 quota files ,估计大概有 2 Mb 左右填满零的空间给没有 quota 的使用者。
指定一个使用者或使用群的 quota
现在用 "edquota -u " 来编辑使用者的限额以及 "edquota -g " 来编辑使用群的限额。
只需编辑位于soft 以及 hard 关键字后面的数字。有两行给每个打开 quotas 的档案系统使用。 Soft 的意思是指软性限制,如果使用者或使用群超越了这个限制,他们会有些优待期限用来确定他们回到软性限制的范围内。
这是可以使用 "edquota -t" 然后输入以日数来加以改变的。如果他们不在优待期限内删除这些部份的话,那麽将会被当作硬性限制处理。硬性限制是他们所能分配到的绝对最大限额,如果他们想要分配更多则这些档案会被拦腰斩断。
说明 blocks 的那一行是一个人所能分配的区块数目,说明 inode 的那一行是一个人所能分配的索引节点 (files/named piple/devices/e) 数目。
全部都以相同的限额增加使用者
到 homedir 所在的地方去。对其中一个使用者执行 edquota 并且将限额改换成适当的数值。这个使用者变成所有其他使用者或使用群的原形。然后这样做:
# edquota -p <你以正确的限额编辑过的使用者>*
这样应该可以执行这个技术,所有的使用者现在都有他们所需要的限额,现在你可以对还有其它需要的人进行编辑。
检验使用者的限额
执行 quota 程式。这个程式的语法是:
用法:
quota [-guqv]
quota [-qv] -u 使用者名称...
quota [-qv] -g 使用群名称...
用 -v 来查看 quotas 在
1) 你没有设限额的档案系统
2) 你已经设了限额但是目前还没有分配任何区块的档案系统
用 -q 只查看那些你分配了超过你的软性限制或已经达到你的硬性限制的档案系统。
这 -g 旗标给你你所属的使用群的所有限额(也包括附加的使用群)。
关掉对某个使用者的限额
当你想要关掉对某个使用者的限额时用限额编辑器 edquota 。键入 "edquota 〈使用者名称 | uid〉" 或者 "edquota -g 〈使用群名称 | gid〉" 并且将区块的软性限制与硬性限制以及索引节点的软性限制与硬性限制设成零。这样应该可以关掉对这个使用者的限额而只要这个使用者想要,分配多少区块或索引节点都可以。
在一个档案性统上所有使用者所使用的限额列表
你可以使用 repquota 程式来取得一份目前的档案系统或任何档案系统中所有被使用的限额列表。这个程式需要读取 quotafiles 所以我需要以超级使用者来执行它或者如果你的 quotafiles 是任何人都可以读取则任何使用者都可以执行。不建议这样做。
在 NFS-mounted 磁碟上使用 quotas
要在 NFS 档案系统上使用 quota 你需要把 quota 安装到档案伺服器上而不是 client上。客户机器可以借由 quota 指令取得有关限额的资讯,它会对你挂上 NFS 磁碟的档案伺服器的 rquotad 提出查询。所以不要对挂上的 NFS 磁碟设置任何 usrquota 或者是 grpquota 旗标。而以在你的档案伺服器安装 quotas 来取代。并且从你的网路 rc档案中启动 rpc.rquotad 。
超级块是存储对应文件系统元数据的结构,存储的元数据包括包括文件系统大小,块大小,以及空闲及已使用的块的数量inode表的大学及位置等消息下面是对应的内核源码struct super_block {
struct list_heads_list /* Keep this first */
dev_ts_dev /* search index_not_ kdev_t */
unsigned chars_dirt
unsigned chars_blocksize_bits
unsigned longs_blocksize
loff_ts_maxbytes /* Max file size */
struct file_system_type*s_type
const struct super_operations*s_op
const struct dquot_operations*dq_op
const struct quotactl_ops*s_qcop
const struct export_operations *s_export_op
unsigned longs_flags
unsigned longs_magic
struct dentry*s_root
struct rw_semaphores_umount
struct mutexs_lock
ints_count
atomic_ts_active
#ifdef CONFIG_SECURITY
void*s_security
#endif
const struct xattr_handler **s_xattr
struct list_heads_inodes /* all inodes */
struct hlist_heads_anon /* anonymous dentries for (nfs) exporting */
#ifdef CONFIG_SMP
struct list_head __percpu *s_files
#else
struct list_heads_files
#endif
/* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */
struct list_heads_dentry_lru /* unused dentry lru */
ints_nr_dentry_unused /* # of dentry on lru */
struct block_device*s_bdev
struct backing_dev_info *s_bdi
struct mtd_info*s_mtd
struct list_heads_instances
struct quota_infos_dquot /* Diskquota specific options */
ints_frozen
wait_queue_head_ts_wait_unfrozen
char s_id[32] /* Informational name */
void *s_fs_info /* Filesystem private info */
fmode_ts_mode
/* Granularity of c/m/atime in ns.
Cannot be worse than a second */
u32 s_time_gran
/*
* The next field is for VFS *only*. No filesystems have any business
* even looking at it. You had been warned.
*/
struct mutex s_vfs_rename_mutex /* Kludge */
/*
* Filesystem subtype. If non-empty the filesystem type field
* in /proc/mounts will be "type.subtype"
*/
char *s_subtype
/*
* Saved mount options for lazy filesystems using
* generic_show_options()
*/
char *s_options
}
i节点是一个64字节长的表,存储着一个文件的元数据,包括文件大小、文件所有者、文件存取许可方式,以及文件类型,磁盘地址表。struct inode {
struct hlist_nodei_hash
struct list_headi_list /* backing dev IO list */
struct list_headi_sb_list
struct list_headi_dentry
unsigned longi_ino
atomic_ti_count
unsigned inti_nlink
uid_ti_uid
gid_ti_gid
dev_ti_rdev
unsigned inti_blkbits
u64i_version
loff_ti_size
#ifdef __NEED_I_SIZE_ORDERED
seqcount_ti_size_seqcount
#endif
struct timespeci_atime
struct timespeci_mtime
struct timespeci_ctime
blkcnt_ti_blocks
unsigned short i_bytes
umode_ti_mode
spinlock_ti_lock /* i_blocks, i_bytes, maybe i_size */
struct mutexi_mutex
struct rw_semaphorei_alloc_sem
const struct inode_operations*i_op
const struct file_operations*i_fop /* former ->i_op->default_file_ops */
struct super_block*i_sb
struct file_lock*i_flock
struct address_space*i_mapping
struct address_spacei_data
#ifdef CONFIG_QUOTA
struct dquot*i_dquot[MAXQUOTAS]
#endif
struct list_headi_devices
union {
struct pipe_inode_info*i_pipe
struct block_device*i_bdev
struct cdev*i_cdev
}
__u32i_generation
#ifdef CONFIG_FSNOTIFY
__u32i_fsnotify_mask/* all events this inode cares about */
struct hlist_headi_fsnotify_marks
#endif
unsigned longi_state
unsigned longdirtied_when /* jiffies of first dirtying */
unsigned inti_flags
atomic_ti_writecount
#ifdef CONFIG_SECURITY
void*i_security
#endif
#ifdef CONFIG_FS_POSIX_ACL
struct posix_acl*i_acl
struct posix_acl*i_default_acl
#endif
void*i_private/* fs or device private pointer */
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)