jiayi Rss

很好很强大的 Dropbox

Posted by jiayi | Posted in Linux, Open Source | Posted on 13-09-2008

4

前两天浏览 linux 新闻,看到 Dropbox 这样一款开源、免费的网络存储工具,性能很好,功能也很人性化,所以在首页留了个邮箱申请使用。

前天收到回复,昨天才看…
Dropbox has a free 2GB account, but we’re giving away 100 50GB accounts as part of our thanks to those who signed up early. Just install Dropbox, and during signup enter the code "xxxxx" within the next 2 days (i.e. before Saturday night at 11:59PM PST) to be eligible to win — please don’t spread that code around!

原来我可以享受元老级的存储容量,哈哈,没有理由拒绝啦~于是下了源码安装

安装后,在 panel 的启动项里会有 dropbox 的 icon,说明已经安装成功。因为我这里需要设置代理,所以先“右击”,“preferences”里设置代理。再“右击”,这时会有连接web的提示按钮,点之,浏览器中打开了dropbox的注册页面,没的说,注册之…

注册成功后,会进入你的 home 页面,

这个页面里的文件对应本地磁盘 ~/Dropbox 目录的文件,打开~/Dropbox 目录

这时,你在本地做的改动会随时同步到 Dropbox 的web界面,同样,在 web 界面做得改动也会同步到本地。所以,如果你出门在外,想把一些好东西传到自己已经关闭的电脑,那dropbox 再合适不过了,安装dropbox 程序到本地就可以实现。提一句,dropbox 是开源、多平台的,Win Mac都可以使用。

Dropbox 还有个很好的用途,如果你不小心在本地共享目录里删除了文件,dropbox web端会有记录

你只需点开相应的记录,再点 restore 就可以恢复啦

Dropbox 还有许多其他优秀的特性,比如私有文件管理等,大家装上试试就知道啦,很强大的一个网络存储工具,完全free的哦~

Linux NFS 配置

Posted by jiayi | Posted in Linux | Posted on 12-09-2008

2

这回为啥不是openSUSE NFS配置…?额,因为openSUSE的nfs-server有点bug,昨天差点白折腾了一天…哎,open版毕竟不是企业版。。。

虽然在openSUSE上没有搞定,但jiayi在RedHat Server 4上取得成功,这里偷偷赞一下RedHat…

Server端
RedHat Server 4上非常轻松,只需两步…这里假定Server 端ip为192.168.0.51
1.编辑/etc/exports文件
比如想把/home/nfs目录与其他用户共享,可以加入
/home/nfs/ *(rw,sync)
其中*表示任何用户,rw表示获得读写权限,sync表示NFS服务器等待本地磁盘读写完毕,这事最安全的,也是默认的。

在这说一下exports文件的格式和选项吧…
分享目录 允许读取的客户端主机名或 IP地址  (选项1, 选项:2,…) …

允许读取的客户端主机名或 IP地址:
可以用域名,如 *.jiayii.com,這表示此域名內的所有主机都可以挂载nfs 共享分区 ; 当然,还可以用IP 地址,如 192.168.1.0/24 或 192.168.1.0/255.255.255.0 這類的表示法 ; 而 " * ",就表示允许所有机器前来挂载。对另外一个分享目录来说,你可以针对不同的client 来源而制定不同的选项。

选项:

ro 默认值。表示 client 端对此目录的权限为只读。
rw 允许clinet端对目录有读写权限,不过前提是使用者原本就对此目录有读写权限才可以。
root_squash 默认值。client端的root用户被映射为服务器上的匿名用户 nobody,这意味着client端的root用户对挂载的共享文件并没有全部的root权限
no_root_squash 不把client端 root 用户映射为服务器上的匿名用户 nobody,这意味着client 端的root用户对挂载的共享目录有真正的root权限
 all_squash  不论任何client 端挂载共享目录时,都将被映射为server 端的nobody用户
 no_all_squash  默认值。 不会把所有client 端用户映射为server 端的nobody
 anonuid  当client 端的用户被 squash 成nobody 时,此 nobody 的 UID 要被设定为多少。默认值为 65534,当然可以对其作出修改,比如 anonuid = 500 (mysql的UID)。
 anongid  与上面的anonuid一样,只是把UID换成GID
 sync  默认值。同步 I/O,也就是在数据改变时,会同步写入硬盘中。
 async  异步I/O,先将改变的数据在存至cache,然后取出放回硬盘。这样可以提升性能,但容易造成数据丢失。

2.启动nfs服务器
service nfs start
开机自动运行,同样chkconfig –add nfs(RedHat Server 4确实比较老,都是长选项…)
顺便再说一句,如果exports文件的内容有所改变,之后要运行
exportfs -r 命令,或者service nfs restart
exportfs命令的具体用法请man之

client端
我的环境为openSUSE 11.0,这个应该大同小异
1.开启服务
service nfs start
开机自动运行
chkconfig -a nfs
2.手动挂载nfs目录,比如将上面nfs分区挂至client 本机的/mnt/nfs
一般挂载:mount 192.168.0.51:/home/nfs /mnt/nfs
优化挂载:mount 192.168.0.51:/home/nfs /mnt/nfs -o rsize=8192 wsize=8192
这里选项的数值最好在4096到16384之间,且为1024的整数倍
3.开机自动挂载
编辑/etc/fstab,加入如下语句
192.168.0.51:/home/nfs      /mnt/nfs    nfs defaults,rw,bg  0 0
这里唯一比较关键的是bg选项。如果NFS Server出现问题,或者你的ip变更后不能与NFS Server规定的来源ip相匹配,那么这会导致client 端引导服务不可用,花费很长时间直至超时…所以加上bg选项,让挂载进程在后台执行,这样就不会让所有进程都等待于它…

为了更安全高效,NIS服务应该与NFS搭配,但jiayi已经没那个心情了,啥时候心血来潮,配好了再放上来咯~

好啦,到此NFS Server 和NFS Client都搞定了,在你的Client 端,如果拥有适当的权限,就会像操作自己的分区系统一样,去操作nfs分区。
我测试了下,从自己的文件系统copy文件到nfs分区,速度为13M/s,哈哈,尽情享受网络共享存储吧~

linux VPN配置失败…

Posted by jiayi | Posted in Linux | Posted on 09-09-2008

0

这几天系统配置各种不顺,Quartus II折腾了5天,拖了8G的文件,腾了10G的空间,最后还是因为该死的证书作罢!
昨天说Wine一个Chrome,按照SuSE WIKI上的步骤,启动Chrome后死活不显示网页…

今天热切想搞定VPN,以便晚上代理挂掉后还能上外网,所以格外的卖命…尝试了3种从client端,相继不地…

1.pptp client
因为要求装php4的包,和我php5的环境不兼容,依赖关系没搞定,连完整的pptp client都没装上…

2.vpnc
按照SuSE WIKI的步骤,千辛万苦搞到Group name和Group passwd,还是连不上,没有一点的相应。。。

3.Kvpnc
vpnc的KED GUI…这个选择microsoft的连接方式可以连接成功,但dns又出现问题,所有网址都解析不出来…指定各种DNS,无济于事…

sigh

openSUSE 11.0搭建LAMP

Posted by jiayi | Posted in Linux | Posted on 07-09-2008

5

openSUSE 11.0 的操作本来就比较傻瓜,如果在系统安装过程中选择了LAMP安装,那配置起来就更简单了~但如果没有选择,请先从源里直接安装apache、php5、MySQL5的rpm包。

下面是我的配置过程

1.设置代理
jiayi身处教育网,代理是生活必需品…
root登录,打开Yast(命令行 "yast2 –qt") -> 网络服务 -> 代理,设置即可。
不喜欢GUI的CMDer,可以在/etc/sysconfig/proxy文件中设置。

2.添加源
打开Yast(命令行 "yast2 –qt") -> 软件 -> 软件安装源,添加源的URL。
具体URL请在http://en.opensuse.org/Additional_YaST_Package_Repositories中寻找。
jiayi用的有repo-oss、repo-non-oss、packman、JackLab、compiz、google、Mozilla、plugin、wine,这里用到的php apache之类在repo-oss中。
不喜欢GUI的CMDer可以在/etc/zypp/repos.d/目录中创建配置文件,不过鉴于文件名没有规范,不建议如此。

3.安装
Yast(命令行 "yast2 –qt") -> 软件 -> 软件管理,安装apche2、php5、MySQL5,自动解决依赖性。

4.配置apache,php,MySQL
4.1 apache
/etc/apache2/default-server.conf文件中进行配置(保持默认及可),如DocumentRoot(默认为
/srv/www/htdocs ),目录、文件容器以及各种规则…详情情参考牛X无比的apache手册:httpd.apache.org/docs/trunk/
开启apache,输入命令:service apache2 start
若要开机自动运行,输入命令:chkconfig -a apache2

4.2 php
/etc/php5/apache2/php.ini中配置,具体选项请参照里面的注释。同样,保持默认及可。

4.3 MySQL
启动MySQL:service mysql start
检查状态:chkconfig mysql
开机自动启动:chkconfig -a mysql

设置root密码:mysql -u root mysql
在MySQL二级提示符下输入:SET PASSWORD FOR root@localhost=PASSWORD(’MyPasswd’);

登录实验:mysql -u root -p
输入密码即可登录root

推荐客户端phpMyAdmin,下载解压到apache DocumentRoot目录下,浏览器中输入http://localhost/phpMyAdmin

5.Hello php
/srv/www/htdocs目录下创建phpinfo.php,加入代码:

CODE

<?php
    echo phpinfo()
?>

浏览器输入http://localhost/phpinfo.php
显示如下:

6.优化完善
到现在,我们的PHP只具备一些基本的功能,一些库如gd画图库,math数学库都没能得以实现,PHP缓存加速器也没有得到集成。不过没关系,用上面配好的源去安装就是咯,就这么简单~

一个完整的LAMP环境搭完毕,尽情去读写数据库,创建动态页面,实现高级web应用,释放LAMP惊人的能量吧~

Konqueror浏览器的SSH登录

Posted by jiayi | Posted in Linux | Posted on 06-09-2008

2

今天在书中无意发现,Konqueror浏览器有图形登录SSH的功能,顿时让我对Konqueror刮目相看~~~

该特性被称为fish(怎么让人联想到网上银行的钓鱼…),有效的把ssh工具的功能结合到一台图形远程客户访问机。在Konqueror地址栏输入 fish://user@faraway,Konqueror将试图用当前用户名登录faraway,并且停留在家目录。

如果要指定端口,一定要先在~/.kde/share/config/kio_httprc文件中加上
OverridenPorts=111,222
注意,不能有空白出现
然后在地址栏输入fish://user@faraway:port

没有发现Konqueror提供scp功能,所以只能在远程服务器上对文件进行操作

百度面试题整理

Posted by jiayi | Posted in Linux | Posted on 04-09-2008

5

看题目,应该是linux运维方面的。Sanding根据具体题目,对其中一些答案做了修改。做Baidu面试真题的价值,我认为不在于能作对几个题目,而在于把握考点和出题思路。

1.假设Apache产生的日志文件名为access_log,在apache正在运行时,执行命令mv access_log access_log.bak,执行完后,请问新的apache的日志会打印到哪里,为什么?
新的日志会打印在access_log.bak中,因为apache启动时会找到access_log文件,随时准备向文件中加入日志信息,虽然此时文件被改名,但是由于服务正在运行,因为它的inode节点的位置没有变,程序打开的fd仍然会指向原来那个inode,不会因为文件名的改变而改变。apache会继续向已改名的文件中追加日志,但是若重启apache服务,系统会检查access_log文件是否存在,若不存在则创建。

2.在Shell环境下,如何查看远程Linux系统运行了多少时间?
监控主机执行:ssh user@被监控主机ip "uptime"

3.处理以下文件内容,将域名取出并进行计数排序,如处理:
http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html
得到如下结果:
域名的出现的次数 域名
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com
可以使用bash/perl/php/c任意一种

CODE

cut -d "/" -f3 shu.txt | sort | uniq -c | sort -r | awk ‘{print $1"t"$2}’

3        www.baidu.com
2        post.baidu.com
1        mp3.baidu.com

4.如果得到随机的字串,长度和字串中出现的字符表可定义,并将字串倒序显示,如
把0123456789作为基准的字串字符表,产生一个6位的字串642031,打印出的字串为
130246,可使用bash/perl/php/c任意一种.
这道题我选择用C

 

CODE

#include<stdio.h>
int main()
{
    int a=123456;
    while(a%10>0)
    {  
        printf("%d",a%10);
        a/=10;
    }  
    printf("n");
}
 

5.如何查看当前Linux系统的状态,如CPU使用,内存使用,负载情况等.
Linux系统中“/proc”是个伪文件目录,不占用系统空间,及时的反应出内存现在使用的进程情况……其中许多文件都保存系统运行状态和相关信息
对于“/proc”中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:
cpuinfo          主机CPU信息
filesystems       文件系统信息
meminfo          主机内存信息
version           Linux内存版本信息
diskstatus        磁盘负载情况

另外top命令可以动态的显示当前系统进程用户的使用情况,而且是动态的显示出来,尤其是在该命令显示出来的对上方对系统的情况进行汇总.
free命令呢可以查看真实使用的内存  一般用free -m
使用lsof 、ps -aux 可以查看详细的每个进程的使用状况

6.有10台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/分区适用率大于80%, 就发邮件报警放到crontab里面, 每10分钟检查一次
#测试机器:虚拟机Linux as 4 
#1.首先建立服务器间的信任关系。拿两台机器做测试
本机ip:192.168.1.6

[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y (以为我是第2次建立关系所以此处覆盖原来的文件)
Enter passphrase (empty for no passphrase):(直接回车无须输入密钥)
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
04:37:13:2a:4b:10:af:c1:2b:03:3f:6b:27:ce:b9:62 root@jiayi
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# ll
-rw——-  1 root root 883 Apr 25 17:51 id_rsa
-rw-r–r–  1 root root 221 Apr 25 17:51 id_rsa.pub
-rw-r–r–  1 root root 442 Apr 25 17:37 known_hosts
id_rsa是密钥文件,id_rsa.pub是公钥文件。
[root@localhost .ssh]# scp id_rsa.pub192.168.1.4:/root/.ssh/192.168.1.6
root@192.168.1.4’s password:
id_rsa.pub                                    100%  221     0.2KB/s   00:00
这里把公钥文件取名为本机的ip地址就是为了以后和更多的机器建立信任关系不发生混淆。
现在登陆到192.168.1.4机器
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# cat 192.168.1.6 >> authorized_keys
然后回到192.168.1.6机器直接
[root@loc .ssh]# ssh 192.168.1.4
Last login: Wed Aug  8 12:14:42 2007 from 192.168.1.6
这样就可以了,里面偶尔涉及到权限问题。一般./ssh文件夹是755 authorized_keys为600或者644

脚本diskcheck.sh如下

 

CODE

#!/bin/bash            
FSMAX="80"
remote_user=‘root’  #####完全可以不用root
remote_ip=(192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14  )  ###这里填写你要监控的主机ip
ip_num=‘0′
while [ "$ip_num" -le "$(expr ${#remote_ip[@]} – 1)" ]
do      
        read_num=‘1′      
        ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h > /tmp/diskcheck_tmp
        grep ‘^/dev/*’ /tmp/diskcheck_tmp|awk ‘{print $5}’|sed ’s/%//g’ > /tmp/diskcheck_num_tmp        
        while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]      
        do
                size=$(sed -n "$read_num"‘p’ /tmp/diskcheck_num_tmp)              
                if [ "$size" -gt "$FSMAX" ];then              
                        $(grep ‘^/dev/*’ /tmp/diskcheck_tmp|sed -n $read_num‘p’ > /tmp/disk_check_mail)
                        $(echo ${remote_ip[$ip_num]} >> /tmp/disk_check_mail)              
                        $(mail -s "diskcheck_alert" admin < /tmp/disk_check_mail)              
                fi      
                read_num=$(expr $read_num + 1)      
        done      
        ip_num=$(expr $ip_num + 1)
done

脚本每十分钟执行一次,在cron表中加入
0/10 * * * * /home/jiayi/diskcheck.sh 2>&1

7.比如,ext2文件系统, 如果异常死机,开机如何修复文件系统?
如果异常关机,比如断电,通知机房的人开机之后,我们需要远程修复、检查文件系统。
除了/分区之外, 其他的分区:
umount /home
fsck -y /home
/ 分区需要开机之后, 由机房的人来扫描
随后我们再登录并扫描/home等其他分区

8.如何查看一个进程所使用的文件句柄?
看这里面 /proc/进程号/fd/的个数就行了
简单的比如如何查看apache进程数
[root@localhost fd]#
ps -ef | grep httpd | wc -l
1

9.如何统计apache的每秒访问数?
tail access_log  | awk ‘{print $1,$4}’
[root@localhost logs] grep -c $(date -d ‘3 second ago’ +%T) access_log

10./proc/sys 子目录的作用
该子目录的作用是报告各种不同的内核参数,并让您能交互地更改其中的某些。与 /proc 中所有其他文件不同,该目录中的某些文件可以写入,不过这仅针对 root。

其中的目录以及文件的详细列表将占据过多的篇幅,而且该目录的内容是依赖于系统的,而大部分的文件也仅仅对某些特殊的应用程序有用。然而,以下是该子目录的两个最常见的用途:

允许路由:即便是 Mandrakelinux 默认的内核也是允许路由的,您必需显式允许它这么做。为此,您只要以 root 身份键入以下命令:

$ echo 1 >/proc/sys/net/ipv4/ip_forward
 

如果您要禁用路由,请将上述命令中的 1 改为 0。

阻止 IP 欺骗:IP 欺骗会让人认为某个来自于外部的某个数据包是来自于它到达的那个接口。这一技术常被骇客(cracker)所使用。您可以让内核阻止这种入侵。请键入:

$ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter
 

这样,这种攻击就不再可能了。

这些改变仅当系统运行时有效。在系统重新启动之后,它们会改会它们的默认值。要在启动时就改动这些值,您可以将您在 shell 提示符后键入的命令添加到 /etc/rc.d/rc.local 中以免每次都键入它们。另一个方法是修改

/etc/sysctl.conf

11.将一个文本的奇数行和偶数行合并,第2行和第3行合并
[root@localhost bin]# cat filename
48      Oct     3bc1997 lpas    68.00   lvx2a   138
484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644
320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223
230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189
216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed ‘$!N;s/n/  /g’ filename
48      Oct     3bc1997 lpas    68.00   lvx2a   138  484     Jan     380sdf1 usp     78.00   deiv    344
483     nov     7pl1998 usp     37.00   kvm9d   644  320     aug     der9393 psh     83.00   wiel    293
231     jul     sdf9dsf sdfs    99.00   werl    223  230     nov     19dfd9d abd     87.00   sdiv    230
219     sept    5ap1996 usp     65.00   lvx2c   189  216     Sept    3zl1998 usp     86.00   kvm9e   234
[root@localhost bin]# sed -n -e 2p -e 3p filename|sed ‘$!N;s/n/ /’
484     Jan     380sdf1 usp     78.00   deiv    344 483     nov     7pl1998 usp     37.00   kvm9d   644

12.
read 命令5秒后自动退出
[root@localhost bin]# read -t5

13.自动ftp上传

CODE

#!/bin/sh
ftp -n<<END_FTP
open 192.168.1.4
user jiayi haha  //用户名jiayi 密码haha
binary
prompt off    //关闭提示
mput test    //上传test
close
bye
END_FTP

国内最大的openSUSE镜像

Posted by jiayi | Posted in Linux, Open Source | Posted on 01-09-2008

6

据 OpenSUSE 官方发布的消息称,由 Coly Li 建立的 lizardsource.cn 成为中国大陆内 OpenSuSE 最大镜像服务器。目前,国内也有大大小小几个 OpenSuSE 镜像服务器,和他们相比 lizardsource.cn 算得上是国内最全面、最大的一个镜像服务器。可以说 lizardsource.cn 是第一个真正的 OpenSuSE 镜像服务器。
 
据说学校和研究院的 CERNET 用户 、电信用户和网通用户都能很快捷得访问 lizardsource.cn,访问的速度也相当快,CERNET 用户的下载速度可以到达 200KB/S。

不过,从我这访问速度很一般…哎,SuSE啥时候出个教育网的好源啊……

实例解说fdisk使用

Posted by jiayi | Posted in Linux | Posted on 30-08-2008

0

实例解说 fdisk 使用方法
作者:北南南北 来源:LinuxSir.Org (2006-04-17 12:12:08)

提要:fdisk 是一款功能强大的分区工具,也是目前在Unix类操作系统中最流行的工具之一;分区工具老字号;本篇只介绍其最简单的分区操作功能;

一、fdisk 的介绍

fdisk – Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具;本人译的不太好,也没有看中文文档;其实就是分区工具;

fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等;当然我们用fdisk 对磁盘操作分区时,并不是一个终点,我们还要对分区进行格式化所需要的文件系统;这样一个分区才能使用;这和DOS中的fdisk 是类似的;

二、合理规划您的硬盘分区

在操作分区之前,我们要明白硬盘分区一点理论,比如硬盘容量和分区大小的计算;对一个硬盘如何规划分区等,请参考如下文档,谢谢;

《合理规划您的硬盘分区》

三、fdisk -l 查看硬盘及分区信息

通过《合理规划您的硬盘分区》 ,我们知道主分区(包括扩展分区)的总个数不能超过四个;也不能把扩展分区包围在主分区之间;根据这个原则,我们划分硬盘分区就比较容易的多;也能为以后减少不必要的麻烦;

1、通过fdisk -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 9729 55617030 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
/dev/hda10 7752 9729 15888253+ 83 Linux
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux

通过上面的信息,我们知道此机器中挂载两个硬盘(或移动硬盘),其中一个是hda 另一个是sda ;如果我们想查看单个硬盘情况,可以通过 fdisk -l /dev/hda1 或者fdisk -l /dev/sda1 来操作;以fdisk -l 输出的硬盘标识为准;

其中 hda有三个主分区(包括扩展分区),分别是主分区 hda1 hda2 和hda3(扩展分区) ;逻辑分区是 hda5到hda10;
其中 sda 有两个主分区(包括扩展分区),分别是 hda1 和hda2 (扩展分区);逻辑分区是 sda5 hda6 ;

硬盘总容量=主分区(包括扩展分区)总容量
扩展分区容量=逻辑分区总容量

通过上面的例子,我们可以得知 hda=hda1+hda2+hda3,其中hda3=hda5+hda6+hda7+hda8+hda9+hda10 … …

2、关于fdisk -l 一些数值的说明;

Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

这个硬盘是80G的,有255个磁面;63个扇区;9729个磁柱;每个 cylinder(磁柱)的容量是 8225280 bytes=8225.280 K(约为)=8.225280M(约为);

分区序列 引导 开始 终止 容量 分区类型ID 分区类型
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 9729 55617030 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
/dev/hda10 7752 9729 15888253+ 83 Linux

说明:

硬盘分区的表示:在Linux 是通过hd*x 或 sd*x 表示的,其中 * 表示的是a、b、c … … x表示的数字 1、2、3 … … hd大多是IDE硬盘;sd大多是SCSI或移动存储;
引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区;
Start (开始):表示的一个分区从X cylinder(磁柱)开始;
End (结束):表示一个分区到 Y cylinder(磁柱)结束;
id和System 表示的是一个意思,id看起来不太直观,我们要在fdisk 一个分区时,通过指定id来确认分区类型;比如 7表示的就NTFS 分区;这个在fdisk 中要通过t功能来指定。下面的部份会提到;
Blocks(容量):这是我翻译的,其实不准确,表示的意思的确是容量的意思,其单位是K;一个分区容量的值是由下面的公式而来的;

Blocks = (相应分区End数值 – 相应分区Start数值)x 单位cylinder(磁柱)的容量

所以我们算一下 hda1的 Blocks 的大小 :

hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M

注:换算单位以硬盘厂家提供的10进位算起,如果以操作系统二进制来算,这个分区容量应该更少一些,得出的这个值和我们通过 fdisk -l 看到的 /dev/hda1的值是大体相当的,因为换算方法不一样,所以也不可能尽可能的精确;再加上分区时的一点损失之类,有时或大或小是存在的;

我们查看分区大小或者文件的时候,还是用十进制来计算比较直观;推算办法是 byte 向前推小数点三位就是K ,K单位的值向前推小数点三位就是M,M向前推小数点三位就是G… … 一般也差不了多少;这么算就行;

3、估算一个存储设备是否被完全划分;

我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱体) 上一个分区的End 和下一个分区的Start是不是一个连续的数字,另外要看一下每个硬盘设备的fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值;

比如hda设备,我们看到的是 9729 cylinders ;我们通过 hda的分区表可以看到上一个分区的End的值+1 就是下一个分区的Start 的值;比如 hda2的Start的值是 hda1 的End 的值+1,这证明 hda1 和hda2 中间没有空白分区,是连续的,以此类推;在 hda10,我们看到 End 的值是9729 ,而在fdisk -l头部信息中也有9729 cylinders,证明这个硬盘已经完全划分;

Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux

我们再看看 sda 移动储是不是被完全划分了;sda有 125个cylinders (柱体),有一个主分区和一个扩展分区构成;在扩展分区中,我们看到End的值为125,而这个移动硬盘的cylinder也是125,这能说明这个硬盘不可能再添加任何主分区了;根据我们上面所说的 sda1 sda2 sda5 sda6 之间未有任何未划分空间,但sda6 的cylinders (柱体)的End值却是 76 ,而 sda总的cylinders (柱体)有125个,由此看来sda 在 sda6后面有未划分区域;

至于sda 有多少未划分空间,我们算一下就知道了;扩展分区总容量是 806400 K ,大约是 806.400M左右,而逻辑分区 sda5 和sda6 的大小加起来是 400M左右,所以还仍有400M左右未划分空间,并且只能划分为链逻辑分区;

四、fdisk 对硬盘及分区的操作,进入fdisk 对硬盘操作阶段

我们可以对硬盘进行分区操作,前提是您把fdisk -l 弄明白了;通过fdisk -l ,我们能找出机器中所有硬盘个数及设备名称;比如上面的例子,我们会看到两个设备一个是/dev/hda ,另一个是/dev/sda ;

fdisk 操作硬盘的命令格式如下:

[root@localhost beinan]# fdisk 设备

比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda设备;我们如果想再添加或者删除一些分区,可以用

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

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

注 在以后的例子中,我们要以 /dev/sda设备为例,来讲解如何用fdisk 来操作添加、删除分区等动作;

1、fdisk 的说明;

当我们通过 fdisk 设备,进入相应设备的操作时,会发现有如下的提示;以 fdisk /dev/sda 设备为例,以下同;

[root@localhost beinan]# fdisk /dev/sda
Command (m for help): 在这里按m ,就会输出帮助;
Command action
   a toggle a bootable flag
   b edit bsd disklabel
   c toggle the dos compatibility flag
   d delete a partition 注:这是删除一个分区的动作;
   l list known partition types 注:l是列出分区类型,以供我们设置相应分区的类型;
   m print this menu 注:m 是列出帮助信息;
   n add a new partition 注:添加一个分区;
   o create a new empty DOS partition table
   p print the partition table 注:p列出分区表;
   q quit without saving changes 注:不保存退出;
   s create a new empty Sun disklabel
   t change a partition’s system id 注:t 改变分区类型;
   u change display/entry units
   v verify the partition table
   w write table to disk and exit 注:把分区表写入硬盘并退出;
   x extra functionality (experts only) 注:扩展应用,专家功能;

其实我们常用的只有注有中文的,其它的功能我们不常用(呵,主要是我不会用,否则早会卖弄一下了);x扩展功能,也不是常用的;一般的情况下只要懂得 d l m p q t w 就行了;

下面以实例操作来详述,没有例子没有办法就,新手也看不懂;

2、列出当前操作硬盘的分区情况,用p;

Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux

3、通过fdisk的d指令来删除一个分区;

Command (m for help): p 注:列出分区情况;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 76 200781 83 Linux
Command (m for help): d 注:执行删除分区指定;
Partition number (1-6): 6 注:我想删除 sda6 ,就在这里输入 6 ;
Command (m for help): p 注:再查看一下硬盘分区情况,看是否删除了?
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help):

警告:删除分区时要小心,请看好分区的序号,如果您删除了扩展分区,扩展分区之下的逻辑分区都会删除;所以操作时一定要小心;如果知道自己操作错了,请不要惊慌,用q不保存退出;切记切记!!!!在分区操作错了之时,千万不要输入w保存退出!!!

4、通过fdisk的n指令增加一个分区;

Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
Command (m for help): n 注:增加一个分区;
Command action
   l logical (5 or over) 注:增加逻辑分区,分区编号要大于5;为什么要大于5,因为已经有sda5了;
   p primary partition (1-4) 注:增加一个主分区;编号从 1-4 ;但sda1 和sda2都被占用,所以只能从3开始;
p
Partition number (1-4): 3
No free sectors available 注:失败中,为什么失败?

注:我试图增加一个主分区,看来是失败了,为什么失败?因为我们看到主分区+扩展分区把整个磁盘都用光了,看扩展分区的End的值,再看一下 p输出信息中有125 cylinders;最好还是看前面部份;那里有提到;

所以我们只能增加逻辑分区了;

 Command (m for help): n
Command action
   l logical (5 or over)
   p primary partition (1-4)
l 注:在这里输入l,就进入划分逻辑分区阶段了;
First cylinder (51-125, default 51): 注:这个就是分区的Start 值;这里最好直接按回车,如果您输入了一个非默认的数字,会造成空间浪费;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:这个是定义分区大小的,+200M 就是大小为200M ;当然您也可以根据p提示的单位cylinder的大小来算,然后来指定 End的数值。回头看看是怎么算的;还是用+200M这个办法来添加,这样能直观一点。如果您想添加一个10G左右大小的分区,请输入 +10000M ;
Command (m for help):

5、通过fdisk的t指令指定分区类型;

Command (m for help): t 注:通过t来指定分区类型;
Partition number (1-6): 6 注:要改变哪个分区类型呢?我指定了6,其实也就是sda6
Hex code (type L to list codes):L 注:在这里输入L,就可以查看分区类型的id了;
Hex code (type L to list codes): b 注:如果我想让这个分区是 W95 FAT32 类型的,通过L查看得知 b是表示的是,所以输入了b;
Changed system type of partition 6 to b (W95 FAT32) 注:系统信息,改变成功;是否是改变了,请用p查看;
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ c W95 FAT32 (LBA)
/dev/sda2 26 125 806400 5 Extended
/dev/sda5 26 50 201568+ 83 Linux
/dev/sda6 51 75 201568+ b W95 FAT32

6、fdisk 的退出,用q或者 w;

其中 q是 不保存退出,w是保存退出;

Command (m for help): w

Command (m for help): q

7、一个添加分区的例子;

本例中我们会添加两个200M的主分区,其它为扩展分区,在扩展分区中我们添加两个200M大小的逻辑分区;

Command (m for help): p 注:列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
Command (m for help): n 注:添加分区;
Command action
   e extended
   p primary partition (1-4)
p 注:添加主分区;
Partition number (1-4): 1 注:添加主分区1;
First cylinder (1-125, default 1): 注:直接回车,主分区1的起始位置;默认为1,默认就好;
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n 注:添加新分区;
Command action
   e extended
   p primary partition (1-4)
p 注:添加主分区
Partition number (1-4): 2 注:添加主分区2;
First cylinder (26-125, default 26):
Using default value 26
Last cylinder or +size or +sizeM or +sizeK (26-125, default 125): +200M 注:指定分区大小,用+200M来指定大小为200M
Command (m for help): n
Command action
   e extended
   p primary partition (1-4)
e 注:添加扩展分区;
Partition number (1-4): 3 注:指定为3 ,因为主分区已经分了两个了,这个也算主分区,从3开始;
First cylinder (51-125, default 51): 注:直接回车;
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): 注:直接回车,把其余的所有空间都给扩展分区;
Using default value 125
Command (m for help): p
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
Command (m for help): n
Command action
   l logical (5 or over)
   p primary partition (1-4)
l 注:添加逻辑分区;
First cylinder (51-125, default 51):
Using default value 51
Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): n
Command action
   l logical (5 or over)
   p primary partition (1-4)
l 注:添加一个逻辑分区;
First cylinder (76-125, default 76):
Using default value 76
Last cylinder or +size or +sizeM or +sizeK (76-125, default 125): +200M 注:添加一个大小为200M大小的分区;
Command (m for help): p 列出分区表;
Disk /dev/sda: 1035 MB, 1035730944 bytes
256 heads, 63 sectors/track, 125 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
   Device Boot Start End Blocks Id System
/dev/sda1 1 25 201568+ 83 Linux
/dev/sda2 26 50 201600 83 Linux
/dev/sda3 51 125 604800 5 Extended
/dev/sda5 51 75 201568+ 83 Linux
/dev/sda6 76 100 201568+ 83 Linux

然后我们根据前面所说通过t指令来改变分区类型;

最后不要忘记w保存退出;

五、对分区进行格式化,以及加载

先提示一下;用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区,比如我想格式化 sda6为ext3文件系统,则输入;

[root@localhost beinan]# mkfs.ext3 /dev/sda6

如果我想加载 sda6到目前系统来存取文件,应该有mount 命令,但首先您得建一个挂载目录;比如 /mnt/sda6 ;

[root@localhost beinan]# mkdir /mnt/sda6
[root@localhost beinan]# mount /dev/sda6 /mnt/sda6
[root@localhost beinan]# df -lh
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 8.4G 2.0G 81% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/hda10 16G 6.9G 8.3G 46% /mnt/hda10
/dev/sda6 191M 5.6M 176M 4% /mnt/sda6

这样我们就能进入 /mnt/sda6目录,然后存取文件了;

具体的权限方法,以及mount 更详细的用法,在以后我会专门写一个帖子;在一帖中放下所有的内容实在有点为难。

原文链接:http://fedora.linuxsir.org/main/?q=node/81