首页 > Linux技术 > Linux系统管理技术手册第七章习题实践

Linux系统管理技术手册第七章习题实践

2009年12月22日 wgzhao 发表评论 阅读评论

很抱歉,前段时间一直出差,书太重,不可能带着跑,所以习题实践中断了一段时间,不过我不会放弃这个计划的。
好了,废话少说。第七章习题较多,最后一个题目难度很大,按照书的前言描述,这应该可以当作一个学期的课程设计,所以暂时不实现(其实是我不善于编程,所以完成需要一个程序需要很长的时间)

E7.1 列出SCSI的所有种类。每种SCSI该用什么样的连接器?不考虑连接器的差异,不同SCSI版本之间有哪些兼容性问题?

A:如果这个题目回退到10年前,也许他的确需要引起重视,我记得01年我刚接触到一台带有SCSI磁盘的低端存储用来做实验时,就需要自己设置ID号,自己跳线,自己连接终结端子。而现在,这一切都对我们透明了,我们只需要简单的把SCSI/SATA/SAS硬盘插入到对应的插槽就好了,不用考虑不同SCSI版本的兼容性,不用考虑SCSI种类的兼容性。一切看上去都是那么完美。
最开始的时候,窄的SCSI线(8位)和宽SCSI(16位)有混用的情况,SCSI-1和ultra-SCSI也有混用的情况,这些当时都需要考虑兼容性问题。现在恐怕没有谁这么去用了吧?比如,我们还能找到8位的SCSI线吗?
So,这个问题现在不重要了。

E7.2 硬盘格式化和硬盘分区之间有什么区别?分区和创建文件系统之间有什么区别?

A:如果这样定义也许会比较好点:硬盘格式化就是硬盘初始化,比如设定磁盘的磁盘标签格式(GPT,MSDOS,Sundisk,etc)。分区说的是将硬盘分成特定大小的逻辑空间,而创建文件系统就是在逻辑空间里写满特定文件系统的元数据信息。

E7.3 列出以下环境下,在一个硬盘上创建一个文件系统所要用到的命令和参数

  1. 硬盘用户保存home目录;
  2. 硬盘用于交换区;
  3. 硬盘用在一个很大的垃圾邮件站点存储邮件队列;
  4. 硬盘装有一个MySQL InnoDB数据库。

A:假定这个分区是/dev/sda3
home目录保存的是用户的数据,文件大小也不会趋向某一个区段,那就采取最基本的创建文件系统方式好了,不过这里可以把默认的5%保留空间拿走,以腾出更多的空间来保存数据。那么命令就是mkfs.ext3 -m 0 /dev/sda3
交换分区,采取创建交换分区的特有指令,首先把分区的ID设置为82,然后执行mkswap /dev/sda3,最后激活它.swapon  /dev/sda3
邮件队列的特点是,文件多,文件体积小,因此我们尽可能的增加inode数量,减小block size的大小。推荐指令如下:
mkfs.ext3 -b 1024 -m 0 /dev/sda3
MySQL InnoDB 已经支持裸设备,当然直接使用裸设备效率会更高。具体可以移步到官方说明

E7.4 LVM工具软件功能强大,但是如果没有搞得清楚就可能发生混淆。联系实际,说明如何成功地从一个卷组删除一个设备,并加入到另外一个卷组。

A:说说话,实际工作中,LVM的活干得很多,设置包括了LVM的紧急救援,恢复工作。但是对于迁移,还真没有实实在在的在生产环境中做过。所以,这里只能是理论上了。
首先得要查看当前要删除的设备(当然是一个PV了)是否已经在使用了,这个可以通过pvscan和pvdisplay指令可以获得。如果没有在使用,那就比较容易了,直接用vgreduce vgname pvname(path)的方式先从该卷组中,删除掉。
然后通过vgextend vgname pvname(path)的方式加入就可以了。
如果在使用,则需要通过查看LV的信息,看看是哪几个LV在使用,则需要迁移数据。删除对应的LV,接下来的指令同上。

E7.5 使用书面印刷的或者Internet上的资源。确定性能最好的SCSI硬盘和IDE硬盘,评测这些硬盘所采取的评测指标能反映出一台繁忙的Linux服务器把它用作引导盘的情况吗?您会为SCSI花多少钱?您从多花的钱上得到了多高的性能提升(如果有的话)?

A:呃,这个题目,我似乎只能自行飘过。也许CIO们会感兴趣吧。

E7.6 在给您的系统增加一块硬盘。让新硬盘的一个分区备份根分区,安装一个内核,并从该分区引导。记录下完成此项任务所有的步骤。

A:

  1. 对硬盘进行分区,创建文件系统,然后挂载,比如挂载在/newroot目录下。
  2. 把当前系统的根分区拷贝过来,拷贝需要技巧,仅仅只要拷贝根分区下的目录,对于独立出来的分区,比如/usr,/var等就不要拷贝了。
  3. 修改/newroot/etc/fstab把根分区的挂载设定为当前新硬盘的分区。
  4. 拷贝需要安装的内核包到/newroot目录。
  5. chroot /newroot
  6. 安装内核
  7. 修改/boot/grub/menu.lst文件,增加当前新系统的引导入口。
  8. 调试。

E7.7 什么是超级块?它有什么用?在内核的头文件中查出ext2fs超级块的结构定义,并讨论结构中每一个域所代表的含义。

A:超级块结构表示一个文件系统。它包含管理文件系统所需的信息,包括文件系统名称(比如 ext2)、文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等)。
在/usr/include/linux/ext2_fs.h里有super_block的定义,如下:

struct ext2_super_block {
	__le32	s_inodes_count;		/* Inodes count */
	__le32	s_blocks_count;		/* Blocks count */
	__le32	s_r_blocks_count;	/* Reserved blocks count */
	__le32	s_free_blocks_count;	/* Free blocks count */
	__le32	s_free_inodes_count;	/* Free inodes count */
	__le32	s_first_data_block;	/* First Data Block */
	__le32	s_log_block_size;	/* Block size */
	__le32	s_log_frag_size;	/* Fragment size */
	__le32	s_blocks_per_group;	/* # Blocks per group */
	__le32	s_frags_per_group;	/* # Fragments per group */
	__le32	s_inodes_per_group;	/* # Inodes per group */
	__le32	s_mtime;		/* Mount time */
	__le32	s_wtime;		/* Write time */
	__le16	s_mnt_count;		/* Mount count */
	__le16	s_max_mnt_count;	/* Maximal mount count */
	__le16	s_magic;		/* Magic signature */
	__le16	s_state;		/* File system state */
	__le16	s_errors;		/* Behaviour when detecting errors */
	__le16	s_minor_rev_level; 	/* minor revision level */
	__le32	s_lastcheck;		/* time of last check */
	__le32	s_checkinterval;	/* max. time between checks */
	__le32	s_creator_os;		/* OS */
	__le32	s_rev_level;		/* Revision level */
	__le16	s_def_resuid;		/* Default uid for reserved blocks */
	__le16	s_def_resgid;		/* Default gid for reserved blocks */
	/*
	 * These fields are for EXT2_DYNAMIC_REV superblocks only.
	 *
	 * Note: the difference between the compatible feature set and
	 * the incompatible feature set is that if there is a bit set
	 * in the incompatible feature set that the kernel doesn't
	 * know about, it should refuse to mount the filesystem.
	 *
	 * e2fsck's requirements are more strict; if it doesn't know
	 * about a feature in either the compatible or incompatible
	 * feature set, it must abort and not try to meddle with
	 * things it doesn't understand...
	 */
	__le32	s_first_ino; 		/* First non-reserved inode */
	__le16   s_inode_size; 		/* size of inode structure */
	__le16	s_block_group_nr; 	/* block group # of this superblock */
	__le32	s_feature_compat; 	/* compatible feature set */
	__le32	s_feature_incompat; 	/* incompatible feature set */
	__le32	s_feature_ro_compat; 	/* readonly-compatible feature set */
	__u8	s_uuid[16];		/* 128-bit uuid for volume */
	char	s_volume_name[16]; 	/* volume name */
	char	s_last_mounted[64]; 	/* directory where last mounted */
	__le32	s_algorithm_usage_bitmap; /* For compression */
	/*
	 * Performance hints.  Directory preallocation should only
	 * happen if the EXT2_COMPAT_PREALLOC flag is on.
	 */
	__u8	s_prealloc_blocks;	/* Nr of blocks to try to preallocate*/
	__u8	s_prealloc_dir_blocks;	/* Nr to preallocate for dirs */
	__u16	s_padding1;
	/*
	 * Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
	 */
	__u8	s_journal_uuid[16];	/* uuid of journal superblock */
	__u32	s_journal_inum;		/* inode number of journal file */
	__u32	s_journal_inum;		/* inode number of journal file */
	__u32	s_journal_dev;		/* device number of journal file */
	__u32	s_journal_dev;		/* device number of journal file */
	__u32	s_last_orphan;		/* start of list of inodes to delete */
	__u32	s_last_orphan;		/* start of list of inodes to delete */
	__u32	s_hash_seed[4];		/* HTREE hash seed */
	__u32	s_hash_seed[4];		/* HTREE hash seed */
	__u8	s_def_hash_version;	/* Default hash version to use */
	__u8	s_def_hash_version;	/* Default hash version to use */
	__u8	s_reserved_char_pad;
	__u8	s_reserved_char_pad;
	__u16	s_reserved_word_pad;
	__u16	s_reserved_word_pad;
	__le32	s_default_mount_opts;
	__le32	s_default_mount_opts;
 	__le32	s_first_meta_bg; 	/* First metablock block group */
 	__le32	s_first_meta_bg; 	/* First metablock block group */
	__u32	s_reserved[190];	/* Padding to the end of the block */
	__u32	s_reserved[190];	/* Padding to the end of the block */
};

后面的注释已经写得比较清楚了,就不用再解释了。
网络上详细剖析ext2文件系统的文档也不少。

E7.8 使用mdadm及其-f选项模拟RAID盘阵中一块硬盘发生故障。从这个盘阵删除该硬盘,然后添加回去。每一步/proc/mdstat显示怎么样的信息?

A:

root@wgzhao-nb:~# mdadm  --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Thu Dec 24 16:11:11 2009
     Raid Level : raid1
     Array Size : 2097088 (2048.28 MiB 2147.42 MB)
  Used Dev Size : 2097088 (2048.28 MiB 2147.42 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent
 
    Update Time : Thu Dec 24 16:11:55 2009
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
 
           UUID : 32c53f31:ddeb40ff:06694991:8b2cae0c (local to host wgzhao-nb)
         Events : 0.18
 
    Number   Major   Minor   RaidDevice State
       0       8       32        0      active sync   /dev/sdc
       1       8       16        1      active sync   /dev/sdb
 
root@wgzhao-nb:~# mdadm  -f /dev/md0 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
root@wgzhao-nb:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb[2](F) sdc[0]
      2097088 blocks [2/1] [U_]
 
unused devices: <none>
 
root@wgzhao-nb:~# mdadm --remove /dev/md0 /dev/sdb
mdadm: hot removed /dev/sdb
root@wgzhao-nb:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdc[0]
      2097088 blocks [2/1] [U_]
 
unused devices: </none><none>
 
root@wgzhao-nb:~# mdadm  -a /dev/md0 /dev/sdb
mdadm: added /dev/sdb
 
root@wgzhao-nb:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb[2] sdc[0]
      2097088 blocks [2/1] [U_]
      [====>................]  recovery = 21.4% (451008/2097088) finish=0.2min speed=112752K/sec
 
unused devices: </none><none>
 
root@wgzhao-nb:~# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb[1] sdc[0]
      2097088 blocks [2/2] [UU]
 
unused devices: </none><none>
</none>

E7.9 ext3fs文件系统上的inode保存哪些信息?列出代表文件/etc/motd的inode的内容。这个文件的文件名保存在什么地方(诸如hexdump和ls -i这样的名录可能会有帮助)
A:inode包含以下几个域:

  • 文件属主。分成单个属主和组属主。
  • 文件类型:普通文件、目录、设备文件、FIFO等
  • 访问权限
  • 文件访问时间:上次的文件修改/访问/inode修改时间
  • 链接数:至少是1
  • 文件数据块的地址表
  • 文件大小

原创文章,转载请注明: 转载自Linux|系统管理|WEB开发

本文链接地址: Linux系统管理技术手册第七章习题实践

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.