LINUX-磁盘加载-实际应用

Linux磁盘加载教程
本文详细介绍了在Linux环境下进行磁盘加载的过程,包括关闭服务器、插入磁盘、启动服务器、查看磁盘信息、加载磁盘、格式化磁盘、创建挂载点、挂载磁盘及设置自动挂载。

LINUX-磁盘加载-实际应用
=========================================================
1:关闭服务器之前先一定要关闭数据库

$export ORACLE_SID=mis
$sqlplus /nolog
sql>conn /as sysdba;
sql>shutdown immediate;

2:关闭服务器
#init 0
或者
#shutdown

3:插入磁盘
将插槽灰尘擦干净,插入磁盘

4:启动服务器

5:查看磁盘信息
检查磁盘是否检测到,命令用fdisk,而df -lh 是检测已经MOUNT的磁盘

[root@DELL root]# fdisk -l
Disk /dev/sda: 293.3 GB, 293391564800 bytes
255 heads, 63 sectors/track, 35669 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1033 8193150 83 Linux
/dev/sda3 1034 2053 8193150 83 Linux
/dev/sda4 2054 35669 270020520 f Win95 Ext'd (LBA)
/dev/sda5 2054 2563 4096543+ 82 Linux swap
/dev/sda6 2564 3073 4096543+ 83 Linux
/dev/sda7 3074 3583 4096543+ 83 Linux
/dev/sda8 3584 3838 2048256 83 Linux
/dev/sda9 3839 3965 1020096 83 Linux
/dev/sda10 3966 35669 254662348+ 83 Linux

Disk /dev/sdb: 299.9 GB, 299976622080 bytes
255 heads, 63 sectors/track, 36470 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 38913 312568641 7 HPFS/NTFS

从最后一行我看到/dev/sdc1,表示检测到第三块scsi磁盘。
sdc,s表示scsi,c表示第三块。而上面我看到
/dev/sdb 没有挂载上去,那是我加载的一个移动硬盘,可以手工挂载就是。


6:加载磁盘

主要动作包括:
a:选择是扩展分区还是主分区,如果以前加载的主分区超过4个,那么就要选择extend,扩展分

区。
这是一个常识,主分区最多4个,扩展分区可以说不受限制。
分区大小选择,我做了一个分区,所有磁盘加载到一个分区。当然也可以分区好几个。如果分

几个分区,
那么在输入size:1-38912 就输入相应的大小。

b:分区完以后 输入:w 保存。

[root@DELL root]# fdisk /dev/sdc1
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 38912.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): p
Partition number (1-4): 4
First cylinder (1-38912, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-38912, default 38912): 38012

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

7:格式化磁盘
这个很好理解,只有格式化磁盘,我们才能使用磁盘的空间。
命令 mkfs -t ext3 -c /dev/sdc1
mkfs 表示格式化
-t 即是tytle 文件类型。linux 目前都用ext3,不在使用ext2;另外也可以选择swap,作为文件

交换使用
-c 表示source,即磁盘来源,这里显然是要格式化/dev/sdc1

格式化需要很长时间估计4-5个小时,因为我是远程操作,所以比较慢。我估计直接在服务器

上可能比较快。
那天由于我没有办法,把自己的笔记本留在公司,让它一直格式化,让后回家了。

[root@DELL root]# mkfs -t ext3 -c /dev/sdc1
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
39075840 inodes, 78142160 blocks
3907108 blocks (5.00%) reserved for the super user
First data block=0
2385 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616


Checking for bad blocks (read-only test): done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

从上面可以看到 read,writing 都做完了。接下来我们只要mount,就可以使用空间了。


8:mount
先创建你要MOUNT 的点。即你要把这个使用的空间加载到你使用的文件目录。任何文件夹都可

以!
由于我是用来数据库mis用来做备份的,所以我取名为misbak;

[root@DELL /]# mkdir /misbak
[root@DELL /]# mount /dev/sdc1 /misbak
[root@DELL /]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/sda10 240G 165G 63G 73% /
/dev/sda1 99M 14M 81M 15% /boot
/dev/sda3 7.7G 1.7G 5.7G 24% /home
/dev/sda6 3.9G 41M 3.7G 2% /opt
none 989M 0 989M 0% /dev/shm
/dev/sda7 3.9G 33M 3.7G 1% /tmp
/dev/sda2 7.7G 5.0G 2.4G 69% /usr
/dev/sda8 2.0G 311M 1.6G 17% /usr/local
/dev/sda9 981M 591M 341M 64% /var
/dev/sdc1 294G 33M 279G 1% /misbak


从上面可以看到size 294G, aval 279G


9:vi fstab
在服务器重启后,需要自动加载磁盘,这个时候需要
#vi /ect/fstab

[root@DELL etc]# vi fstab

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
LABEL=/opt /opt ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/usr/local /usr/local ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/sda5 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/sdb1 /mnt auto defaults
/dev/sdc1 /misbak ext3 defaults 1 2
~
最后一行就是我加上去的,相信大家都可以看懂
我这次就是想把整个过程详细的做个记录!!!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25136010/viewspace-682995/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25136010/viewspace-682995/

<think>好的,用户想了解Linux-gate.so在Linux系统中的作用和工作原理。我需要先回忆一下相关知识,并参考提供的引用内容。 首先,根据引用[1],linux-gate.so.1并不是磁盘上的实际文件,而是由内核虚拟生成的,用于系统调用的机制。这点很重要,用户可能误以为这是一个普通的共享库,但实际上它不存在于文件系统中。 引用[4]提到,ldd命令无法找到这个文件的位置,因为它并不真实存在。这说明当用户使用类似工具时,可能会感到困惑,需要解释清楚其虚拟性。 接下来,需要解释它的作用。用户可能知道系统调用是用户空间和内核空间交互的接口,而linux-gate.so.1提供了高效的系统调用方式。传统的系统调用通过int 0x80软中断,而现代系统可能使用更快的指令,比如sysenter/syscall。linux-gate.so.1可能封装了这些方法,根据CPU能力选择最优方式,这点需要确认。 另外,引用[2]和[3]可能补充了历史背景,比如该机制的出现是为了提升性能,替代旧方法。用户可能想知道为什么需要这样一个虚拟的动态库,以及它如何影响应用程序的运行。 关于工作原理,需要说明当程序启动时,动态链接器加载linux-gate.so.1,但它实际映射到内核地址空间中的一个特定区域。这样,系统调用可以直接跳转到内核提供的代码,无需上下文切换,提升效率。 用户可能还关心兼容性和不同架构的实现差异,比如x86和x86_64的不同处理方式。需要提到不同CPU架构下,linux-gate的实现可能不同,但用户通常无需直接操作它。 总结结构应该是:先说明其虚拟性,再解释作用(系统调用接口),然后详细工作原理,包括映射方式和性能优化,最后提到兼容性和开发注意事项。确保引用对应的来源,比如引用[1]和[4]中的解释,避免技术错误。</think>### Linux-gate.so 的作用与工作原理 #### 一、核心作用 Linux-gate.so.1 是 Linux 内核动态生成的**虚拟共享库**,其核心作用是为用户空间程序提供**高效的系统调用接口**。它并非实际存储在磁盘上的文件,而是由内核在内存中直接映射的特殊区域[^1][^4]。 #### 二、工作机制详解 1. **虚拟映射技术** - 当进程启动时,内核会将预设的地址空间(如 `0xffffe000`)映射为 linux-gate.so 的代码段 - 通过 `cat /proc/self/maps` 可观察到其存在: ``` $ cat /proc/self/maps ffffe000-fffff000 ---p 00000000 00:00 0 [vdso] ``` - 该区域包含优化后的系统调用指令序列[^3] 2. **性能优化路径** - 传统系统调用通过 `int 0x80` 软中断实现(约 100+ 时钟周期) - Linux-gate 采用更高效的指令: - x86 架构:`sysenter/sysexit` - x86_64 架构:`syscall/sysret` - 新的调用方式可减少 30-50% 的上下文切换开销[^3] 3. **动态适配机制** - 根据 CPU 特性自动选择最佳调用方式 - 通过 `__kernel_vsyscall` 函数统一接口 - 示例调用路径: ```c // 用户空间调用 syscall(SYS_write, fd, buf, count); // 实际执行 → __kernel_vsyscall() → sysenter/syscall ``` #### 三、开发者视角 1. **透明性设计** - 动态链接器自动加载该库(无需开发者干预) - 在 ELF 文件的程序头中可见: ``` Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align PHDR 0x000034 0x00000034 0x00000034 0x00100 0x00100 R E 0x4 INTERP 0x000134 0x00000134 0x00000134 0x00013 0x00013 R 0x1 [Requesting program interpreter: /lib/ld-linux.so.2] LOAD 0x000000 0x00000000 0x00000000 0x004e4 0x004e4 R E 0x1000 LOAD 0x000f0c 0x00001f0c 0x00001f0c 0x0010c 0x0011c RW 0x1000 DYNAMIC 0x000f20 0x00001f20 0x00001f20 0x000d0 0x000d0 RW 0x4 NOTE 0x000148 0x00000148 0x00000148 0x00044 0x00044 R 0x4 GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4 EXIDX 0x0004d8 0x000004d8 0x000004d8 0x00018 0x00018 R 0x4 ``` 2. **兼容性保障** - 旧版系统回退机制:自动切换为 `int 0x80` - 架构差异处理: - x86_64 已将其功能集成到标准库 - ARM 架构使用 `swi` 指令实现类似功能 #### 四、常见误解澄清 1. **为何 ldd 显示缺失?** - 该库由内核动态生成,无实体文件 - 示例输出: ``` $ ldd /bin/ls linux-gate.so.1 (0xb7ee1000) libcap.so.2 => /lib/libcap.so.2 (0xb7ec8000) libc.so.6 => /lib/libc.so.6 (0xb7d73000) /lib/ld-linux.so.2 (0xb7ee3000) ``` 2. **与 ld-linux.so 的区别** - `/lib/ld-linux.so.2` 是实际的动态链接器 - Linux-gate 是系统调用接口的优化实现[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值