• Posts tagged "Ubuntu"
  • (Page 4)

Blog Archives

RHadoop培训 之 Linux基础课

RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析。Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来替代Java的MapReduce实现。有了RHadoop可以让广大的R语言爱好者,有更强大的工具处理大数据1G, 10G, 100G, TB, PB。 由于大数据所带来的单机性能问题,可能会一去不复返了。

RHadoop实践是一套系列文章,主要包括”Hadoop环境搭建”,”RHadoop安装与使用”,R实现MapReduce的协同过滤算法”,”HBase和rhbase的安装与使用”。对于单独的R语言爱好者,Java爱好者,或者Hadoop爱好者来说,同时具备三种语言知识并不容 易。此文虽为入门文章,但R,Java,Hadoop基础知识还是需要大家提前掌握。

关于作者

张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
blog: http://blog.fens.me
email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/rhadoop-linux-basic/

linux-basic

前言

覆盖Linux基础知识,快速上手,搭建RHadoop环境的基础课。

目录

  1. 背景知识
  2. 文件系统
  3. 常用命令
  4. vi编辑器
  5. 用户管理
  6. 磁盘管理
  7. 网络管理
  8. 系统管理
  9. 软件包管理
  10. 常用软件

1. 背景知识

Linux起源
Linux是一个诞生于网络、成长于网络且成熟于网络的奇特的操作系统。1991年,芬兰大学生Linus萌发了开发一个自由的UNIX操作系统的想法。

Ubuntu Linux最早于2004年作为Debian的一个分支出现,其创始人是南非企业家Mark Shuttleworth。Ubuntu项目由Shuttleworth的公司Canonical和社区志愿开发者共同努力开发而成,目的是实 现一个现代 版的Linux版本,使其在桌面系统上真正具有竞争力,更适合主流非技术用户使用。

Ubuntu的重点在于提高易用性,并且坚持定时发布新版本,即每隔六个月发布一个新版本。这确保了用户不再使用过时的软件。

http://www.ubuntu.com/

Linux安装

  • 在物理上面安装Linux (略…)
  • 在虚拟机上面安装Linux

vbox-linux

 

客户端软件

Putty,http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

putty

 

2. 文件系统

a.目录结构


ls /
bin dev home lib lost+found mnt proc run selinux sys usr vmlinuz
boot etc initrd.img lib64 media opt root sbin srv tmp var

b.常用目录介绍


/bin 所有用户都能执行的命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/home 用户主目录的基点
/sbin 系统管理员才能执行的命令
/tmp 公用的临时文件存储点
/root 系统管理员的主目录
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/var 某些大文件的溢出区,比方说各种服务的日志文件

c.简单了解的目录介绍


/lib 标准程序设计库
/lib64 标准程序设计库
/lost+found 这个目录平时是空的,系统非正常关机而留下恢复的文件
/proc 正在运行的内核信息映射
/sys 硬件设备的驱动程序信息
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录
/usr/bin 众多的应用程序
/boot 该目录默认下存放的是Linux的启动文件和内核
/media 挂载多媒体设备
/opt 第三方软件在安装时默认会找这个目录,所以你没有安装此类软件时它是空的

d. 文件和目录


ls -l /etc/passwd
-rw-r--r-- 1 root root 1146 May 28 20:48 /etc/passwd
第一列:文件类型和权限
第二列:i节点,硬件连接数
第三列:用户
第四列:用户组
第五列:文件大小
第六列:最近一次修改时间mtime
第七列:文件或者目录名

上面第一列: -rw-r--r--
1列:文件类型 (-普通文件, d目录, l链接文件)
2-10列:用户权限,用户组权限,其他人权限, 读r(4),写w(2),执行x(1)
rw- : 4+2+0=6
r-- : 4+0+0=4
r-- : 4+0+0=4
chmod 644 /etc/passwd

3. 常用命令


man: 查询帮助文档
ls: 列出目前下的所有内容 (a, l)
cd: 变换工作目录(~, . , .., -)
pwd: 显示当前目录
touch: 创建一个空文件或者改变创建时间
mkdir: 创建一个目录(p)
rmdir: 删除一个空目录(p)
rm: 删除文件和目录 (rf)
cp: 复制文件和目录(rf)
mv: 移动文件和目录
cat: 显示一个文件内容
head: 显示文件前N行 (-n)
tail: 显示文件后N行(-n)

less : 分屏显示文件内容
wc: 统计计数 (l,w,m)
chmod:  给目录设置权限(R)
chown:  修改目录和文件用户或者用户组 (R)
chgrp: 修改目录和文件用户组(R)
which: 按路径查找命令
whereis: 按资料库查找命令
locate: 按文件包查询
find: 按条件查询
gzip: 压缩和解压文件(-n,d)
zcat: 查看gzip压缩文件内容

zip: 以zip压缩文件和目录 (r)
unzip: 解压zip文件
bzip2: 以bz2压缩和解压文件 (z,d) 
bzcat: 查看bz2压缩文件内容
tar: 打包并压缩文件(czvf, xzvf)
shutdown: 定时关机(-h 18:00, -r重启)
halt: 关机
init: 切换运行级别(0关机)
poweroff: 关机
reboot: 重启
history: 查看命令行历史
grep: 使用正则表达式搜索文本

echo:  打印环境变量
export: 查看环境变量,或者声明变量
clear: 清空屏幕
alias: 设置别名(alias cls='clear')
locale: 当前系统语言环境
sudo: 切换成root用户运行
> : 输入到文件 (locale > a.txt)
>> : 合并到文件末尾 (locale >> a.txt)
| : 管道过滤 (cat a.txt| grep en_US)
ln: 建立链接文件(s软链接)
sh: 执行一个shell脚本
date: 查看当前系统时间
time:统计程序消耗时间

4. vi编辑器

a. vi的基本概念
基本上vi可分为三种操作状态,分别是命令模式(Command mode)、插入模式(Insert mode)和底线命令模式(Last line mode),

  • Comand mode:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,或者到Last line mode。
  • Insert mode:唯有在Insert mode下,才可做文字数据输入,按Esc等可回到Comand mode。
  • Last line mode:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等。

b. 命令模式(Command mode)

移动光标类命令:

h :光标左移一个字符 
l :光标右移一个字符 
space:光标右移一个字符 
Backspace:光标左移一个字符 
k或Ctrl+p:光标上移一行 
j或Ctrl+n :光标下移一行 
Enter :光标下移一行 
w或W :光标右移一个字至字首 
b或B :光标左移一个字至字首 
e或E :光标右移一个字至字尾 
) :光标移至句尾 
( :光标移至句首 
}:光标移至段落开头 
{:光标移至段落结尾 
$:光标移至当前行尾 

屏幕翻滚类命令

Ctrl+u:向文件首翻半屏 
Ctrl+d:向文件尾翻半屏 
Ctrl+f:向文件尾翻一屏 
Ctrl+b;向文件首翻一屏  

插入文本类命令

i :在光标前 
I :在当前行首 
a:光标后 
A:在当前行尾 
o:在当前行之下新开一行 
O:在当前行之上新开一行 

删除命令

do:删至行首 
d$:删至行尾 
ndd:删除当前行及其后n-1行 

c. 插入模式(Insert mode)
编辑文本信息

d. 底线命令模式(Last line mode)

:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下 
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 
:n1,n2 d :将n1行到n2行之间的内容删除 
:w :保存当前文件 
:e filename:打开文件filename进行编辑 
:x:保存当前文件并退出 
:q:退出vi 
:q!:不保存文件并退出vi 
:!command:执行shell命令command 
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 
:r!command:将命令command的输出结果放到当前行 

5. 用户管理


useradd:命令用来建立用户帐号和创建用户的起始目录。
passwd: 设定账号的密码
groupadd: 将新组加入系统
adduser: 增加用户到sudo

groupadd hadoop 
useradd hadoop -g hadoop;
passwd hadoop 
adduser hadoop sudo
mkdir /home/hadoop 
chown -R hadoop:hadoop /home/hadoop

sudo: 切换到root执行命令
  sudo –i: 切换到root账号

su: 切换其他用户      
who: 显示系统中有哪些用户登陆系统。
whoami: 显示当前操作的用户名

ls -l /etc/passwd
-rw-r--r-- 1 root root 1146 May 28 20:48 /etc/passwd

6. 磁盘管理

fdisk: 硬盘分区工具(l)
partprobe: 不重启让分区生效
mkfs: 格式化硬盘(-t ext4)

mount: 挂载分区
umount: 取消挂载分区

/etc/fstab:开机自动挂载
    /dev/vdb1        /home/cos/hadoop      ext4    defaults 0       0

df: 查看当前硬盘的使用情况(ah)
du: 查看目录下的文件夹大小(shd)

7. 网络管理

a. 网络配置

hostname: 显示或修改主机名
/etc/hostname
    u1

/etc/hosts:配置主机名与ip的映射
    127.0.0.1       localhost
    127.0.1.1       u1

    # The following lines are desirable for IPv6 capable hosts
    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters

/etc/network/interfaces: 配置网卡信息
    auto lo
    iface lo inet loopback

    auto eth0
    #iface eth0 inet dhcp
    iface eth0 inet static
    address 192.168.1.200
    netmask 255.255.255.0
    gateway 192.168.1.1

/etc/init.d/networking restart: 重启网络配置

ifup eth0: 激活eth0网卡
ifdown eth0: 关闭eth0网卡

/etc/resolv.conf: DNS配置
    nameserver 192.168.1.1
    nameserver 8.8.8.8

b. 网络命令

ping: 检查主机网络接口状态
netstat: 检查整个Linux网络状态。
route: 检查本地路由信息
ifconfig: 检查网卡的信息
nslookup:机器的IP地址和其对应的域名
dig:用于询问DNS域名服务器的灵活的工具
traceroute:追踪网络数据包的路由途径

8. 系统管理

a. 系统命令

ps: 检查系统进程(aux)
kill: 指定进程ID杀进程(-9)
killall: 通过批量名字杀死进程(-9)
top: 查看系统运行状态,以CPU占用最高排序
free: 查看系统内存资源

b. 系统日志

dmesg:dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer。
/var/log/syslog: 查看系统日志

9. 软件包管理

a. dpkg
dpkg是Debian系统的后台包管理器,类似RPM。也是Debian包管理系统的中流砥柱,负责安全卸载软件包,配置,以及维护已安装的软件包。由于ubuntu和Debian乃一脉相承,所以很多命令是不分彼此的。

dpkg -i package.deb 安装包
dpkg -r package 删除包
dpkg -P package 删除包(包括配置文件)
dpkg -L package 列出与该包关联的文件
dpkg -l package 显示该包的版本
dpkg –unpack package.deb 解开 deb 包的内容
dpkg -S keyword 搜索所属的包内容
dpkg -l 列出当前已安装的包
dpkg -c package.deb 列出 deb 包的内容
dpkg –configure package 配置包

b. apt-get
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。

软件源:

/etc/apt/sources.list

deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu precise/

命令:

apt-cache search :  (package 搜索包)
apt-cache show :  (package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install : (package 安装包)
sudo apt-get install : (package - - reinstall 重新安装包)
sudo apt-get -f install : (强制安装?#"-f = --fix-missing"当是修复安装吧...)
sudo apt-get remove : (package 删除包)
sudo apt-get remove --purge : (package 删除包,包括删除配置文件等)
sudo apt-get autoremove --purge : (package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update : 更新源
sudo apt-get upgrade : 更新已安装的包
sudo apt-get dist-upgrade :升级系统
sudo apt-get dselect-upgrade :使用 dselect 升级
apt-cache depends : (package 了解使用依赖)
apt-cache rdepends : (package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧...)
sudo apt-get build-dep : (package 安装相关的编译环境)
apt-get source : (package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean :清理下载文件的存档 && 只清理过时的包
sudo apt-get check :检查是否有损坏的依赖

10. 常用软件

a. 远程管理

telnet: 远程登录Linux主机
ssh: 远程安全登录Linux主机
scp: 基于ssh登陆进行安装的远程文件传输
ftp: 通过ftp协议远程文件传输
wget: 通过http协议远程文件下载

b. 程序编译

./configure:是用来检测你的安装平台的目标特征的。configure是一个脚本,用来确定所处系统的细节,比如使用何种编译器、何种库,以及编译器和库的保存位置,并把Makefile.in的相应部分进行替换,形成Makefile。
make: 是用来编译的,它从Makefile中读取指令,然后编译。
make install: 是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
make clean: 删除临时文件

c. 产生密钥

ssh-keygen:产生SSH认证RSA密钥
ssh 是一个专为远程登录会话和其他网络服务提供安全性的协议。默认状态下ssh链接是需要密码认证的,可以通过添加系统认证(即公钥-私钥)的修改,修改后系统间切换可以避免密码输入和ssh认证.

~ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/conan/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/conan/.ssh/id_rsa.
Your public key has been saved in /home/conan/.ssh/id_rsa.pub.
The key fingerprint is:
40:9b:fe:ad:76:29:79:20:b5:7c:74:e4:c9:46:73:f1 conan@conan
The key's randomart image is:
+--[ RSA 2048]----+
|      .       .. |
|     . o    + .. |
|      +    = +  E|
|     . .. . *    |
|      .oSo o     |
|      ..+..      |
|       ..+..     |
|        +.+      |
|       ..+       |
+-----------------+

ls ~/.ssh
id_rsa  id_rsa.pub  known_hosts authorized_keys

id_rsa:私钥
id_rsa.pub: 公钥
known_hosts:登陆认证过的主机信息
authorized_keys:公钥授权文件

d. 时间管理
参考文章:http://blog.fens.me/linux-ntp/

ntp:服务器是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正,在LAN上与标准间差小于1毫秒,WAN上几十毫秒,且通过加密确认的方式来防止恶毒的协议攻击。

#服务器配置:
sudo apt-get install ntp

ps -aux|grep ntp
ntp      23717  0.0  0.0  39752  2184 ?        Ss   19:40   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 126:135

/etc/init.d/ntp status
* NTP server is running

#客户端同步:
ntpdate 0.cn.pool.ntp.org  
22 Jul 16:45:05 ntpdate[6790]: step time server 218.75.4.130 offset 7618978.781348 sec

e. 定时任务

crontab:设置任务调度(el)
分钟m(0-59), 小时h(1-23), 日期dom(1-31), 月份mon(1-12), 星期down(0-6,0表示周日) 

crobtab -e
# m h    dom mon dow   command
# 每周一早点5:00给目录打包
# 0 5     *   *   1    tar -zcf /var/backups/home.tgz /home/

# 每天同步2次时间。(8:00, 16:00)
# 0 8,16  *   *   *    /usr/sbin/ntpdate 192.168.1.79

f. 网络文件系统

nfs:网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。

#服务器端安装
sudo apt-get install nfs-kernel-server

#配置访问权限
vi /etc/exports
/home/conan/.ssh *(rw,no_root_squash,sync)

#重启
sudo /etc/init.d/nfs-kernel-server restart

#查看配置列表
showmount -e
Export list for conan:
/home/conan/.ssh  *

#创建目录
sudo mkdir /mnt/ssh

#挂载目录
sudo mount 192.168.1.201:/home/conan/.ssh /mnt/ssh/

#查看目录
ls /mnt/ssh/
id_rsa  id_rsa.pub  known_hosts

g. 域名服务器
参考文章:http://blog.fens.me/vps-ip-dns/

bind9:一种开源的DNS(Domain Name System)协议的实现,包含对域名的查询和响应所需的所有软件。它是互联网上最广泛使用的一种DNS服务器。

#安装
sudo apt-get install bind9
cd /etc/bind

#配置
vi named.conf.options
forwarders {
      8.8.8.8;
      8.8.4.4;
};

# 设置wtmart.com域
~ vi named.conf.local
zone "wtmart.com" {
     type master;
     file "/etc/bind/db.wtmart.com";
};

# 配置域名指向IP
~ vi db.wtmart.com
$TTL    604800
@       IN      SOA     wtmart.com. root.wtmart.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      wtmart.com.
@       IN      A       173.255.193.179
@       IN      AAAA    ::1

ip      IN      A       173.255.193.179

lin    IN    A    116.24.133.86

#重启服务器
sudo /etc/init.d/bind9 restart

h. 数据库服务器

mysql: 是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

#安装
sudo apt-get install mysql-server

#配置允许其他计算访问
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf

#设置字符集UTF-8
vi /etc/mysql/my.cnf

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
default-character-set=utf8

[mysqld]
#
# * Basic Settings
#
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

#查看字符集
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

#重启
sudo service mysql restart

转载请注明出处:
http://blog.fens.me/rhadoop-linux-basic/

打赏作者

多硬盘分区管理fdisk

ubuntu实用工具系列文章

操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。

关于作者

张丹(Conan), 程序员Java,R,PHP,Javascript
weibo:@Conan_Z
blog: http://blog.fens.me
email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-fdisk/

fdisk

前言

硬盘是一台计算机的必备硬件之一,计算机如何开始使用硬盘资源就要从硬盘分区说起。开始时,一台计算机只有一块硬盘,在安装Linux Ubuntu时,第一步就是对硬盘进行分区。当我们已经安装操作系统,硬盘空间不够的时候,我们需要增加新的硬盘扩大使用空间,特别是对于虚拟化的主机,这种增加新的硬盘就变得有一些不一样了,要手动进行处理。

我在做测试的走进了一个误区中,一直对subpartition这个概念不太理解,纠结于sdb2p1,sdb2p1这样的分区命名。经过几次测试后,才发现,问题出现是因为对操作系统的不理解,以至于在互联网上都找找不太多相关问题的讨论。下面我就介绍一下,我的误区及如何找到正确的方法。

目录

  1. 分区的基本知识
  2. 新增硬盘分区,走入误区
  3. 完成对新增硬盘分区及挂载

1. 分区的基本知识

a. 硬盘分类及标识:IDE,SATA,SCSI三个大类

硬盘与标识对应关系如下表所示:

装置 装置在Linux内的文件名
IDE硬盘机 /dev/hd[a-d]
SCSI/SATA/USB硬盘机 /dev/sd[a-p]
USB快闪碟 /dev/sd[a-p](与SATA不同)
软盘驱动器 /dev/fd[0-1]
打印机 25针: /dev/lp[0-2]

USB: /dev/usb/lp[0-15]

鼠标 PS2: /dev/psaux

USB: /dev/usb/mouse[0-15]

当前CDROM/DVDROM /dev/cdrom
当前的鼠标 /dev/mouse

上面表格摘自:http://blog.csdn.net/zollty/article/details/7001950

可以看到我现在硬盘有sda标识,物理上是一个SAS硬盘,300G。


~ sudo fdisk -l

Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000efd7c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    97656831    48827392   82  Linux swap / Solaris
/dev/sda2        97656832   136718335    19530752   83  Linux
/dev/sda3       136718336   214843335    39062500   83  Linux
/dev/sda4   *   214843392   215037951       97280   83  Linux

b. 硬盘构成:磁头(head),磁道(track),磁柱(cylinder),扇区(setor)
在互联网上可以很容易找到解释,我就不细说了。

我们在分区的时修改要能看懂硬盘信息就够了。


Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

硬盘信息:
/dev/sdb,1999.3 GB,255个磁头,63个磁道,243068个磁柱,3904897024个扇区。

c. 硬盘的分区
关于linux硬盘的分区主要分为 基本分区(primary partion)和扩充分区(extension partion)两种,基本分区和扩充分区的数目之和不能大于4个。基本分区可以直接使用但不能再分区。扩充分区必须再进行二次分区才能使用。需要对扩充分区建立逻辑分区(logical partion),逻辑分区没有数量上限制。

所以,对于新增硬盘来说,如果我们只有4个及以下的分区要求,可以直接用基本分区完成。如果1T的硬盘想分成6个区,就需要用扩充分区+逻辑分区来实现。

2. 新增硬盘分区,走入误区

我现在外接了两块SATA 7200转硬盘,分为都是1T的。重新计算机可以看硬盘信息。


~ sudo fdisk -l

Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000efd7c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    97656831    48827392   82  Linux swap / Solaris
/dev/sda2        97656832   136718335    19530752   83  Linux
/dev/sda3       136718336   214843335    39062500   83  Linux
/dev/sda4   *   214843392   215037951       97280   83  Linux

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904892927   976222208    7  HPFS/NTFS/exFAT

两块硬盘,分别挂载到了/dev/sdb1,/dev/sdb2。下面我们对/dev/sdb2硬盘进行处理。

/dev/sdb2还没有进行分区。


~ fdisk -l /dev/sdb2

Disk /dev/sdb2: 999.7 GB, 999651540992 bytes
255 heads, 63 sectors/track, 121534 cylinders, total 1952444416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

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

注意下面是进入误区的思考:

对sdb2进行磁盘分区规划:


/         50G
/extends  750G
  /ext1   150G
  /ext2   150G
  /ext3   150G
  /ext4   150G
  /ext5   150G

开始进行分区


~ sudo fdisk  /dev/sdb2
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6e28e6e6.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

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
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

创建第一个基本分区/,大小为50G, 50*1024*1024*1024/512+2048=104859648


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-1952444415, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1952444415, default 1952444415): 104859648

Command (m for help): p

Disk /dev/sdb2: 999.7 GB, 999651540992 bytes
255 heads, 63 sectors/track, 121534 cylinders, total 1952444416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x44198dad

     Device Boot      Start         End      Blocks   Id  System
/dev/sdb2p1            2048   104859648    52428800+  83  Linux

创建第二个扩充分区750G,750*1024*1024*1024/512+104859648=1677723648


Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (1-4, default 2):
Using default value 2
First sector (104859649-1952444415, default 104859649):
Using default value 104859649
Last sector, +sectors or +size{K,M,G} (104859649-1952444415, default 1952444415): 1677723648

Command (m for help): p

Disk /dev/sdb2: 999.7 GB, 999651540992 bytes
255 heads, 63 sectors/track, 121534 cylinders, total 1952444416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x44198dad

     Device Boot      Start         End      Blocks   Id  System
/dev/sdb2p1            2048   104859648    52428800+  83  Linux
/dev/sdb2p2       104859649  1677723648   786432000    5  Extended

创建逻辑分区1, 150G, 150*1024*1024*1024/512+104861697=419434497


Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (104861697-1677723648, default 104861697):
Using default value 104861697
Last sector, +sectors or +size{K,M,G} (104861697-1677723648, default 1677723648): 419434497

创建逻辑分区2, 150G, 150*1024*1024*1024/512+419436546=734009346
创建逻辑分区3, 150G, 150*1024*1024*1024/512+734009346=1048582146
创建逻辑分区4, 150G, 150*1024*1024*1024/512+1048582146=1363154946
创建逻辑分区5, 150G, 150*1024*1024*1024/512+1363154946=1677723648

查看分区结果


Command (m for help): p

Disk /dev/sdb2: 999.7 GB, 999651540992 bytes
255 heads, 63 sectors/track, 121534 cylinders, total 1952444416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x44198dad

     Device Boot      Start         End      Blocks   Id  System
/dev/sdb2p1            2048   104859648    52428800+  83  Linux
/dev/sdb2p2       104859649  1677723648   786432000    5  Extended
/dev/sdb2p5       104861697   419434497   157286400+  83  Linux
/dev/sdb2p6       419436546   734009346   157286400+  83  Linux
/dev/sdb2p7       734011395  1048582146   157285376   83  Linux
/dev/sdb2p8      1048584195  1363154946   157285376   83  Linux
/dev/sdb2p9      1363156995  1677723648   157283327   83  Linux

退出保存


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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

更新内核分区表
不用重启系统,更新内核分区表

sudo partprobe

用fdisk查看新建的分区


~ sudo fdisk -l

Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000efd7c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    97656831    48827392   82  Linux swap / Solaris
/dev/sda2        97656832   136718335    19530752   83  Linux
/dev/sda3       136718336   214843335    39062500   83  Linux
/dev/sda4   *   214843392   215037951       97280   83  Linux

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904892927   976222208    7  HPFS/NTFS/exFAT

这个时候,相信大家已经发现问题了,新建的分区完全没有生效。

对硬盘sdb2使用fdisk查看分区


~ fdisk -l /dev/sdb2

Disk /dev/sdb2: 999.7 GB, 999651540992 bytes
255 heads, 63 sectors/track, 121534 cylinders, total 1952444416 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x44198dad

     Device Boot      Start         End      Blocks   Id  System
/dev/sdb2p1            2048   104859648    52428800+  83  Linux
/dev/sdb2p2       104859649  1677723648   786432000    5  Extended
/dev/sdb2p5       104861697   419434497   157286400+  83  Linux
/dev/sdb2p6       419436546   734009346   157286400+  83  Linux
/dev/sdb2p7       734011395  1048582146   157285376   83  Linux
/dev/sdb2p8      1048584195  1363154946   157285376   83  Linux
/dev/sdb2p9      1363156995  1677723648   157283327   83  Linux

为什么会这样的?网上查了一下,一些朋友也遇到了这样的情况。他们把sdb2p1的这种分区叫做子分区subpartition。

操作系统不明白,为什么要在sdb2的分区上再创建sdb2p1子分区。但当时我也不明白,如果我想把一块新的硬盘分区后再使用应该如何进行。其实,这种纠结的想法,原于对操作系统的不了解,导致了明白的人不会出现这种错误,出现这种错误的人找不到明白的解释。

跳出子分区的概念,我们应该如何操作呢!

3. 完成对新增硬盘分区及挂载

上面的错误在于,我们不应该对/dev/sdb2硬盘分区,而是对/dev/sdb进行分区。


Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904892927   976222208    7  HPFS/NTFS/exFAT

操作系统已经把两块新增加的硬盘,识别为了/dev/sdb,这个时候我们只需要删除原有的/dev/sdb2基本分区,重建为扩充分区,然后再按要求做逻辑分区就可以了。

删除sdb2分区,重建为扩充分区/dev/sdb2


~ sudo fdisk /dev/sdb
Command (m for help): d
Partition number (1-4): 2

Command (m for help): p

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (1-4, default 2):
Using default value 2
First sector (1952448512-3904897023, default 1952448512):
Using default value 1952448512
Last sector, +sectors or +size{K,M,G} (1952448512-3904897023, default 3904897023):
Using default value 3904897023

Command (m for help): p

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904897023   976224256    5  Extended

重新规划分区:

创建逻辑分区1, 150G, 150*1024*1024*1024/512+1952450560=2267023360
创建逻辑分区2, 150G, 150*1024*1024*1024/512+2267023360=2581596160
创建逻辑分区3, 150G, 150*1024*1024*1024/512+2581596160=2896168960
创建逻辑分区4, 150G, 150*1024*1024*1024/512+2896168960=3210741760
创建逻辑分区5, 150G, 150*1024*1024*1024/512+3210741760=3525314560
创建逻辑分区6, 189G, 剩余空间


Command (m for help): p

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904897023   976224256    5  Extended
/dev/sdb5      1952450560  2267023360   157286400+  83  Linux
/dev/sdb6      2267025409  2581596160   157285376   83  Linux
/dev/sdb7      2581598209  2896168960   157285376   83  Linux
/dev/sdb8      2896171009  3210741760   157285376   83  Linux
/dev/sdb9      3210743809  3525314560   157285376   83  Linux
/dev/sdb10     3525316609  3904897023   189790207+  83  Linux

保存退出


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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

更新内核分区表
sudo partprobe

查看新建的分区

ls /dev/sdb
sdb    sdb1   sdb10  sdb2   sdb5   sdb6   sdb7   sdb8   sdb9

格式化分区


sudo mkfs -t ext4 /dev/sdb5
sudo mkfs -t ext4 /dev/sdb6
sudo mkfs -t ext4 /dev/sdb7
sudo mkfs -t ext4 /dev/sdb8
sudo mkfs -t ext4 /dev/sdb9
sudo mkfs -t ext4 /dev/sdb10

挂载分区


~ sudo mount -t ext4 /dev/sdb5 /disk/sdb5
~ ls /disk/sdb5
lost+found

查看最终的分区效果


cos@delta:~$ sudo fdisk -l
[sudo] password for cos:

Disk /dev/sda: 299.4 GB, 299439751168 bytes
255 heads, 63 sectors/track, 36404 cylinders, total 584843264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000efd7c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    97656831    48827392   82  Linux swap / Solaris
/dev/sda2        97656832   136718335    19530752   83  Linux
/dev/sda3       136718336   214843335    39062500   83  Linux
/dev/sda4   *   214843392   215037951       97280   83  Linux

Disk /dev/sdb: 1999.3 GB, 1999307276288 bytes
255 heads, 63 sectors/track, 243068 cylinders, total 3904897024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf919a976

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1952448511   976223232    7  HPFS/NTFS/exFAT
/dev/sdb2      1952448512  3904897023   976224256    5  Extended
/dev/sdb5      1952450560  2267023360   157286400+  83  Linux
/dev/sdb6      2267025409  2581596160   157285376   83  Linux
/dev/sdb7      2581598209  2896168960   157285376   83  Linux
/dev/sdb8      2896171009  3210741760   157285376   83  Linux
/dev/sdb9      3210743809  3525314560   157285376   83  Linux
/dev/sdb10     3525316609  3904897023   189790207+  83  Linux

完成对/dev/sdb2硬盘的分区操作。

希望帮助和我一样走入到误区的朋友吧。

转载请注明出处:
http://blog.fens.me/linux-fdisk/

打赏作者

Ubuntu通过PPTP协议使用VPN

操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/vpn-pptp-client-ubuntu/

vpn-pptp-client

前言

GFW给大家的生活事带来了各种不便,只有靠我们自己才能改变这种不便。像facebook, twitter, youtube, google+, bitbucket, slideside…. 这些世界知名的网站,我们都没有办法直接访问,有时候你很难联想到为什么要屏蔽这些网站。特别是纯技术社区!

不过我们也有很多的技术,可以穿越这条封锁线。今天我们聊一下,ubuntu通过PPTP协议使用VPN(Virtual Private Network),如何看到外面的世界。

关于PPTP的服务器端配置:请参考 在Ubuntu上安装PPTP VPN服务 文章
win7通过PPTP协议使用VPN:请参考 win7通过PPTP协议使用VPN 文章

目录

  1. 获得VPN账号
  2. ubuntu客户端界面配置
  3. ubuntu命令行配置
  4. 看看外面的世界youtube

1. 获得VPN账号

当你有了基于PPTP协议的VPN账号后,怎么在ubuntu中配置!
VPN账号包括3个部分:IP,用户名,密码

比如:(只为演示说明,此账号不可用)
ip: 123.123.123.123
用户名:xx1
密码: xx2

2. ubuntu客户端界面配置

vpn-ubuntu

1. 点击右上角网络 –》VPN Connections –》Configure VPN
2. 新建一个VPN连接–》Add
3. 输入VPN账号:–》Advanced
Connection name: 连接号
Gateway: VPN服务器IP
Username: 用户名
Password: 密码
4. 高级选项 –》 Use Point-to-Point encryption(MPPE)
5. 选择VPN连接 –》 连接成功提示。

3. ubuntu命令行配置

安装pptp客户端软件

~ sudo apt-get install pptp-linux

查看网络配置

~ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:90:e8:19
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe90:e819/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:74 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:8112 (8.1 KB)  TX bytes:8542 (8.5 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

~ ip route 
default via 192.168.1.1 dev eth0  metric 100
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200

初始化一个VPN的连接通道:myvpn

~ sudo pptpsetup --create myvpn --server xxx.xxx.xxx.xxx --username xx1--password xx2--encrypt --start

Using interface ppp0
Connect: ppp0  /dev/pts/1
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local  IP address 10.10.10.3
remote IP address 10.10.10.1

成功连接到远程VPN服务器。

通过刚才的创建脚步:
在/etc/ppp/peers目录下面,会生成一个叫myvpn的文件。
在/etc/ppp目录下面,用户名和密码会写在chap-secrets文件中。


~ sudo vi /etc/ppp/peers/myvpn

# written by pptpsetup
pty "pptp xxx.xxx.xxx.xxx --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name conan2
remotename myvpn
ipparam myvpn
require-mppe-128

#生成用户名和密码
~ sudo vi /etc/ppp/chap-secrets
xx1 myvpn "xx2" *

通过网站路由功能,测试VPN


#安装traceroute 
~ sudo apt-get install traceroute 

~ traceroute www.163.com
traceroute to www.163.com (101.23.128.17), 30 hops max, 60 byte packets
 1  localhost (192.168.1.1)  2.222 ms  3.144 ms  3.132 ms
 2  111.192.144.1 (111.192.144.1)  80.279 ms  80.632 ms  80.624 ms
 3  61.148.185.69 (61.148.185.69)  9.026 ms  9.492 ms  9.479 ms
 4  124.65.61.157 (124.65.61.157)  9.469 ms  9.459 ms  9.447 ms
 5  202.96.12.185 (202.96.12.185)  9.829 ms  9.783 ms  9.771 ms
 6  219.158.96.110 (219.158.96.110)  17.160 ms  17.210 ms  17.158 ms
 7  61.182.176.178 (61.182.176.178)  30.222 ms  28.589 ms  28.077 ms
 8  60.5.194.58 (60.5.194.58)  29.293 ms  29.287 ms  29.276 ms
 9  60.5.197.214 (60.5.197.214)  26.617 ms  26.724 ms  26.668 ms
10  101.23.255.45 (101.23.255.45)  27.672 ms  28.147 ms  26.811 ms
11  101.23.128.17 (101.23.128.17)  25.890 ms  28.065 ms  28.420 ms

我们发现虽然VPN已经连接成功,但是路由没有通过VPN上网,第1跳还是localhost (192.168.1.1)

再次查看网络连接配置


~ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:90:e8:19
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe90:e819/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:175 errors:0 dropped:0 overruns:0 frame:0
          TX packets:162 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16817 (16.8 KB)  TX bytes:19723 (19.7 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:10.10.10.3  P-t-P:10.10.10.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:70 (70.0 B)  TX bytes:76 (76.0 B)

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
10.10.10.1      0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
50.116.27.194   192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

~ ip route
default via 192.168.1.1 dev eth0  metric 100
10.10.10.1 dev ppp0  proto kernel  scope link  src 10.10.10.3
50.116.27.194 via 192.168.1.1 dev eth0  src 192.168.1.200
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200

我们发现默认路由是指向eth0。

下面修改路由配置:

#修改路由命令
~ sudo ip route del default 
~ sudo ip route add default dev ppp0

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
10.10.10.1      0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
50.116.27.194   192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

~ ip route
default dev ppp0  scope link
10.10.10.1 dev ppp0  proto kernel  scope link  src 10.10.10.3
50.116.27.194 via 192.168.1.1 dev eth0  src 192.168.1.200
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200

~ traceroute www.163.com
traceroute to www.163.com (101.23.128.17), 30 hops max, 60 byte packets
 1  localhost (10.10.10.1)  281.093 ms  281.414 ms  280.941 ms
 2  router2-dal.linode.com (67.18.7.162)  281.225 ms  281.109 ms  281.841 ms
 3  xe-2-0-0.car04.dllstx2.networklayer.com (67.18.7.93)  280.882 ms  284.002 ms  283.913 ms
 4  po102.dsr01.dllstx2.networklayer.com (70.87.254.81)  284.123 ms  284.087 ms  283.979 ms
 5  po21.dsr01.dllstx3.networklayer.com (70.87.255.65)  284.000 ms  283.921 ms  283.839 ms
 6  ae16.bbr01.eq01.dal03.networklayer.com (173.192.18.224)  283.542 ms  279.296 ms  290.455 ms
 7  dls-bb1-link.telia.net (213.248.102.173)  301.426 ms  302.092 ms  302.085 ms
 8  las-bb1-link.telia.net (213.155.131.77)  327.192 ms  327.350 ms  327.344 ms
 9  chinaunicom-ic-151188-las-bb1.telia.net (213.248.94.126)  478.941 ms  479.089 ms  479.083 ms
10  219.158.30.173 (219.158.30.173)  496.679 ms  496.673 ms  496.667 ms
11  219.158.97.57 (219.158.97.57)  516.819 ms  517.035 ms  517.011 ms
12  219.158.5.129 (219.158.5.129)  491.084 ms  490.018 ms  497.472 ms
13  219.158.100.130 (219.158.100.130)  518.239 ms  518.216 ms  518.192 ms
14  61.182.176.186 (61.182.176.186)  533.695 ms  533.673 ms  533.666 ms
15  101.23.255.230 (101.23.255.230)  512.212 ms  512.500 ms  512.479 ms
16  60.5.194.74 (60.5.194.74)  519.246 ms  519.815 ms  519.791 ms
17  101.23.255.45 (101.23.255.45)  526.522 ms  526.907 ms  526.844 ms
18  101.23.128.17 (101.23.128.17)  522.068 ms  517.535 ms  517.240 ms

查看第一跳,localhost (10.10.10.1),已经通过VPN实现路由。

停止VPN


~ sudo poff myvpn

~ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:90:e8:19
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe90:e819/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2270 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1991 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:207578 (207.5 KB)  TX bytes:184147 (184.1 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

再ping网站,发现网络出现问题。Network is unreachable


~ ping www.163.com
connect: Network is unreachable

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
50.116.27.194   192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

~ ip route
50.116.27.194 via 192.168.1.1 dev eth0  src 192.168.1.200
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200

重置路由


~ sudo ip route add default via 192.168.1.1

~ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
50.116.27.194   192.168.1.1     255.255.255.255 UGH   0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

~ ip route
default via 192.168.1.1 dev eth0
50.116.27.194 via 192.168.1.1 dev eth0  src 192.168.1.200
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200

#再次ping网站,访问成功!
~ ping www.163.com
PING 163.xdwscache.glb0.lxdns.com (101.23.128.17) 56(84) bytes of data.
64 bytes from 101.23.128.17: icmp_req=1 ttl=54 time=25.6 ms
64 bytes from 101.23.128.17: icmp_req=2 ttl=54 time=25.5 ms
64 bytes from 101.23.128.17: icmp_req=3 ttl=54 time=27.8 ms

通过ip-up, ip-down配置路由


~ sudo vi /etc/ppp/ip-up.d/route-traffic

#!/bin/bash
/sbin/ip route add 50.116.27.194 via 192.168.1.1
/sbin/ip route del default
/sbin/ip route add default dev ppp0

~ sudo vi /etc/ppp/ip-down.d/disableroute

#!/bin/bash
/sbin/ip route add default via 192.168.1.1

重启VPN连接


~ sudo pon myvpn
#路由跟踪正确
~ traceroute www.163.com
traceroute to www.163.com (123.125.34.30), 30 hops max, 60 byte packets
 1  localhost (10.10.10.1)  293.397 ms  293.782 ms  293.668 ms
 2  router2-dal.linode.com (67.18.7.162)  293.530 ms  293.721 ms  294.223 ms
 3  xe-2-0-0.car04.dllstx2.networklayer.com (67.18.7.93)  293.454 ms  293.358 ms  293.239 ms
 4  po102.dsr02.dllstx2.networklayer.com (70.87.254.85)  293.749 ms  293.650 ms  293.544 ms
 5  po22.dsr02.dllstx3.networklayer.com (70.87.255.69)  293.444 ms  293.339 ms  293.242 ms
 6  ae17.bbr02.eq01.dal03.networklayer.com (173.192.18.230)  293.117 ms  293.525 ms  300.406 ms
 7  dls-bb1-link.telia.net (80.239.195.177)  300.850 ms  300.667 ms  300.320 ms

#正常退出
~ sudo poff myvpn
#测试网络连接正常
~ ping www.163.com
PING 163.xdwscache.glb0.lxdns.com (101.23.128.17) 56(84) bytes of data.
64 bytes from 101.23.128.17: icmp_req=1 ttl=54 time=28.2 ms
64 bytes from 101.23.128.17: icmp_req=2 ttl=54 time=28.1 ms

4. 看看外面的世界youtube

vpn-youtube

技术性文章,帮助大家更好的了解互联网。

 

转载请注明出处:
http://blog.fens.me/vpn-pptp-client-ubuntu/

打赏作者

时间同步服务器NTP

ubuntu实用工具系列文章

操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-ntp/

前言

服务器的时间同步操作,是每台服务器应该配置的核心功能之一。不管是单机的定时任务,还是大规模的集群服务,都需要有一个统计的时间基准,才能保证程序的正常运行。

ntp-title

目录

  1. 配置同步服务器ntp
  2. 客户机进行时间同步
  3. 系统时间 和 bios硬件时间hwclock

系统环境

Linux Ubuntu 12.10 64位 server

~ uname -a
Linux delta 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

~ cat /etc/issue
Ubuntu 12.10 \n \l

1. 配置同步服务器ntp

host: 192.168.1.79

安装并启动ntp服务器


~ sudo apt-get install ntp

~ ps -aux|grep ntp
ntp      23717  0.0  0.0  39752  2184 ?        Ss   19:40   0:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 126:135

~ /etc/init.d/ntp status
 * NTP server is running

2. 客户机进行时间同步

client: 192.168.1.41

使用ntpdate命令


~ ntpdate
 1 Jul 19:58:48 ntpdate[2056]: no servers can be used, exiting

~ ping 192.168.1.79
PING 192.168.1.79 (192.168.1.79) 56(84) bytes of data.
64 bytes from 192.168.1.79: icmp_req=1 ttl=64 time=0.274 ms
64 bytes from 192.168.1.79: icmp_req=2 ttl=64 time=0.285 ms

时间同步操作


~ whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz

#当前时间
~  date
Mon Jul  1 20:05:33 CST 2013

#重置时间
~ sudo date -s 19:00:00
Mon Jul  1 19:00:00 CST 2013
~ date
Mon Jul  1 19:00:03 CST 2013

#同步时间
~ sudo /usr/sbin/ntpdate 192.168.1.79
 1 Jul 20:07:02 ntpdate[2084]: step time server 192.168.1.79 offset 3987.719712 sec

~ date
Mon Jul  1 20:07:10 CST 2013

同步时间成功,设置定时任务,每天同步2次时间。(8:00, 16:00)

#编辑cron任务
~ sudo crontab -e
0 8,16 * * * /usr/sbin/ntpdate 192.168.1.79

#查看cron设置
~ sudo crontab -l
0 8,16 * * * /usr/sbin/ntpdate 192.168.1.79

#重启cron任务
~ sudo /etc/init.d/cron restart
cron stop/waiting
cron start/running, process 2190

完成时间同步的设置。

3. 系统时间和bios硬件时间

下面我们做多一点时间的测试:

host机, 先后打出下面两条命令:时间是正常的

#系统时间
~ date
Mon Jul  1 20:18:54 CST 2013

#硬件时间
~  sudo hwclock --show
Mon 01 Jul 2013 08:19:00 PM CST  -0.172315 seconds

client机,先后打出下面两条命令,发现两个命令有时间差。

#系统时间
~ date
Mon Jul  1 20:22:31 CST 2013

#硬件时间
~ sudo hwclock --show
Mon 01 Jul 2013 08:24:38 PM CST  -0.927363 seconds

也就是说,刚才client在同步host时,系统时间已经改变了,而硬件的bios时间没有改变,所以出现了软件和硬件的时间不同步的情况。如果client被重启时,系统就会使用硬件时间。

下面同步系统时间,写入到硬件bios

#写入到硬件bios
~ sudo hwclock --systohc

~ date
Mon Jul  1 20:27:19 CST 2013
~ sudo hwclock --show
Mon 01 Jul 2013 08:27:25 PM CST  -0.720095 seconds

好了,这回把时间就设置好了!!

转载请注明出处:
http://blog.fens.me/linux-ntp/

打赏作者

upstart封装mongodb应用为系统服务

ubuntu实用工具系列文章

操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/linux-upstart-mongodb/

upstart-mongodb

前言

本文将介绍封装mongodb应用为系统服务,mongod应用会像一个守护程序一样,被操作系统所管理。通过upstart以系统服务的方式管理mongodb应用。运维起来也会很容易!!

本次实验是针对单个进程mongodb的,如果是mongodb集群,效果会更加明显的。特别进程被非法停止后的自动重启功能,增加了系统的健壮性。

文章目录:

  1. mongodb环境介绍
  2. upstart任务脚本
  3. mongodb应用管理

 

1. Mongodb环境介绍

moive.me是一个nodejs应用,使用mongodb作为数据存储。nodejs开发请参考:从零开始nodejs系列文章

正常情况mongodb的启动命令
~ /usr/bin/mongod --config /etc/mongodb-moive.conf

为mongodb配置启动参数,配置文件mongodb-moive.conf

~ vi /etc/mongodb-moive.conf

dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb-moive.log
logappend=true
bind_ip = 127.0.0.1
port = 27017
journal=true
#fork=true     #如果打开fork, 则upstart的stop,status命令失效。

上面的方式,应用程序会在当前的console界面中运行,一旦console结束,应用也会停止。我们改一下命令,让程序在后台运行。

~ /usr/bin/mongod --config /etc/mongodb-moive.conf &

这样程序就就在后台启动了。进程正常运行着,我也不用做太多的事情。

如果我想停止这个程序,怎么办呢? 找到mongod的系统进程,再杀死。如果我们系统中跑着多个mongod的进程,那么找起来也是一个工作量,而且如果杀错了进程,后果不堪设想。多进程的mongod请参考 MongoDB部署实验系列文章

如果moive的单个应用,能像系统服务一样,通过start, stop, status管理,那将会是多么方便的一件事啊!

2. upstart任务脚本

upstart的使用在 upstart把应用封装成系统服务 一文中已经介绍过了。

~ vi /etc/init/mongodb-moive.conf

description "mongodb moive.me"
author "bsspirit <http://blog.fens.me>"

limit nofile 20000 20000

kill timeout 300

respawn
respawn limit 2 5

pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script
    exec  /usr/bin/mongod --config /etc/mongodb-moive.conf
end script

3. Mongodb应用管理

启动mongodb-moive应用,进程ID:2037


~ start mongodb-moive
mongodb-moive start/running, process 2037

~ ps -aux|grep mongo
root      2037  0.7  1.5 705112 15960 ?        Ssl  07:53   0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf

查看运行状态, 进程2037正常运行


~ status mongodb-moive
mongodb-moive start/running, process 2037

~ mongo
MongoDB shell version: 2.0.4
connecting to: test

> show dbs
local   (empty)
nodejs  0.203125GB
session 0.203125GB

非法关闭测试:杀死nodejs应用进程2037,通过upstart管理,mongodb-moive应用会自动重启


~ kill -9 2037

#查看系统进程,发现进程ID变了  
~ ps -aux|grep mongo
root      2054  2.0  1.5 638548 15872 ?        Ssl  07:53   0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf

#查看进程状态,进程ID确实变了,而且是自动完成的
~ status mongodb-moive
mongodb-moive start/running, process 2054

#命令进行mongo
~ mongo
MongoDB shell version: 2.0.4
connecting to: test

> show dbs
local   (empty)
nodejs  0.203125GB
session 0.203125GB

刚才mongod被进程杀死时的日志, 2037被杀死,2054自动重启。


***** SERVER RESTARTED *****

Sat Jun 22 07:53:35 [initandlisten] MongoDB starting : pid=2037 port=27017 dbpath=/var/lib/mongodb 64-bit host=li478-194
Sat Jun 22 07:53:35 [initandlisten] db version v2.0.4, pdfile version 4.5
Sat Jun 22 07:53:35 [initandlisten] git version: nogitversion
Sat Jun 22 07:53:35 [initandlisten] build info: Linux lamiak 2.6.42-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 BOOST_LIB_VERSION=1_46_1
Sat Jun 22 07:53:35 [initandlisten] options: { config: "/etc/mongodb-moive.conf", dbpath: "/var/lib/mongodb", journal: "true", logappend: "true", logpath: "/var/log/mongodb/mongodb-moive.log" }
Sat Jun 22 07:53:35 [initandlisten] journal dir=/var/lib/mongodb/journal
Sat Jun 22 07:53:35 [initandlisten] recover : no journal files present, no recovery needed
Sat Jun 22 07:53:35 [initandlisten] waiting for connections on port 27017
Sat Jun 22 07:53:35 [websvr] admin web console waiting for connections on port 28017
Sat Jun 22 07:53:38 [initandlisten] connection accepted from 127.0.0.1:37554 #1
Sat Jun 22 07:53:39 [conn1] end connection 127.0.0.1:37554

***** SERVER RESTARTED *****

Sat Jun 22 07:53:56 [initandlisten] MongoDB starting : pid=2054 port=27017 dbpath=/var/lib/mongodb 64-bit host=li478-194
Sat Jun 22 07:53:56 [initandlisten] db version v2.0.4, pdfile version 4.5
Sat Jun 22 07:53:56 [initandlisten] git version: nogitversion
Sat Jun 22 07:53:56 [initandlisten] build info: Linux lamiak 2.6.42-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 BOOST_LIB_VERSION=1_46_1
Sat Jun 22 07:53:56 [initandlisten] options: { config: "/etc/mongodb-moive.conf", dbpath: "/var/lib/mongodb", journal: "true", logappend: "true", logpath: "/var/log/mongodb/mongodb-moive.log" }
Sat Jun 22 07:53:56 [initandlisten] journal dir=/var/lib/mongodb/journal
Sat Jun 22 07:53:56 [initandlisten] recover begin
Sat Jun 22 07:53:56 [initandlisten] info no lsn file in journal/ directory
Sat Jun 22 07:53:56 [initandlisten] recover lsn: 0
Sat Jun 22 07:53:56 [initandlisten] recover /var/lib/mongodb/journal/j._0
Sat Jun 22 07:53:56 [initandlisten] recover cleaning up
Sat Jun 22 07:53:56 [initandlisten] removeJournalFiles
Sat Jun 22 07:53:56 [initandlisten] recover done
Sat Jun 22 07:53:56 [websvr] admin web console waiting for connections on port 28017
Sat Jun 22 07:53:56 [initandlisten] waiting for connections on port 27017
Sat Jun 22 07:54:04 [initandlisten] connection accepted from 127.0.0.1:37559 #1
Sat Jun 22 07:54:56 [clientcursormon] mem (MB) res:47 virt:1008 mapped:160
Sat Jun 22 07:59:56 [clientcursormon] mem (MB) res:47 virt:1008 mapped:160
Sat Jun 22 08:00:25 [conn1] end connection 127.0.0.1:37559

正常关闭mongodb测试:通过stop命令


~ stop mongodb-moive
mongodb-moive stop/waiting

~ status mongodb-moive
mongodb-moive stop/waiting

~  ps -aux|grep mongo

正常关闭mongodb测试:通过mongo命令


~ mongo
MongoDB shell version: 2.0.4
connecting to: test

> use admin
switched to db admin

> db.shutdownServer()
Sat Jun 22 08:10:11 DBClientCursor::init call() failed
Sat Jun 22 08:10:11 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Sat Jun 22 08:10:11 trying reconnect to 127.0.0.1
Sat Jun 22 08:10:11 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Sat Jun 22 08:10:11 Error: error doing query: unknown shell/collection.js:151
>
bye

~ ps -aux|grep mongo
root      2332  0.6  1.5 705112 15960 ?        Ssl  08:10   0:00 /usr/bin/mongod --config /etc/mongodb-moive.conf

我们看们通过mongo的shutdownServer()命令,mongo也会重启,可能是runlevel的设置问题。我们选择要不要使用respawn的重启功能。

我们已经按照moive应用的需求,配置好了mongodb-moive启动程序。

系统运维也将变得如此简单。

转载请注明出处:
http://blog.fens.me/linux-upstart-mongodb/

打赏作者