给 Ubuntu Linux 添加一个大硬盘

曾经预测 3.5″ 的硬盘即将被 2.5″ 硬盘取代. 无奈存储业不争气, 2.5″ 硬盘的容量依旧远远落后于 3.5″. 下面是在 Ubuntu Linux 中使用命令行添加一个 3TB 硬盘的过程.

首先使用 parted (fdisk已退休), 假设新硬盘是第二块, 因此是 sdb:

(parted) select /dev/sdb 
Using /dev/sdb

(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

可以看出, 出厂的硬盘使用的是旧式的 MBR 分区表, 不支持大于 2TB 的分区. 那么接班的是谁呢, 是 GPT

(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes

GPT 分区表做好了, 下面是生成一个使用全部空间的主分区. 其中的 1 表示从第1个MB开始. 不是应该从0开始么? 但是输入 0 -1 的话会收到一个  Warning: The resulting partition is not properly aligned for best performance.  警告.

(parted) mkpart primary 1 -1

(parted) print
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
1      1049kB  3001GB  3001GB  ntfs         primary

到此, parted 的任务已完成, 输入 ‘quit’ 退出. 缺省文件系统居然是 NTFS… 用 EXT4 取代吧.

~ mkfs.ext4 /dev/sdb1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
183148544 inodes, 732566272 blocks
36628313 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
22357 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

然后将旧硬盘里的内容复制过去, 我喜欢用 rsync, 保证原汁原味的复制

~ rsync -av /path/to/source/* /path/to/destination

下面是将新分区挂载到文件系统, 使用 UUID

ls /dev/disk/by-uuid -lh total 0 lrwxrwxrwx 1 root root 10 May 18 13:23 09985c43-f6c2-43c2-a1da-6643c56d5590 -> ../../sdb1 …

最后一件事是把上面的 UUID 写在 /etc/fstab 里面

UUID=09985c43-f6c2-43c2-a1da-6643c56d5590         /home        ext4    defaults    0    2

要生效的话还要 mount -a 一下.

🙂

继续在 Linux 世界里找东西

tux2上一篇.

对于新手老手, 都有一些文件是要找的. 自己的脑子永远不会比一块几百元的硬盘更方便存东西, 所以与其记住每个文件在哪, 不如记住如何找到这些文件. 当然, 养成一个一致的文件存放习惯也很有帮助.

找不常更改的系统文件, 例如某个命令的”真身”位置, 我一般用 locate 命令. Locate 命令是从有索引的数据库里搜索匹配的文件, 所以速度最快. 但有可能数据库更新的不够及时, 也就是说数据库里搜到的文件实际在磁盘上可能不存在了. 因此我不推荐使用 locate 来搜索经常更改的用户文档. 使用方法很简单, 例如我要找 lsb-release (LSB = Linux Standard Base):

~ locate lsb-release
/etc/lsb-release
/usr/share/bug/lsb-release
/usr/share/doc/lsb-release
/usr/share/doc/lsb-release/README.Debian
/usr/share/doc/lsb-release/changelog.Debian.gz
/usr/share/doc/lsb-release/copyright
/var/lib/dpkg/info/lsb-release.list
/var/lib/dpkg/info/lsb-release.md5sums
/var/lib/dpkg/info/lsb-release.postinst
/var/lib/dpkg/info/lsb-release.postrm
/var/lib/dpkg/info/lsb-release.prerm

输入 locate file, 那么 locate 会自动按照 *file* 的规则来查找, 也就是说任何包含 file 的文件以及文件夹都会被搜出来的.

一个更强力的命令是 find, 比起 locate, find 是实实在在的在文件系统里搜索, 因此结果更可靠. 但速度稍慢(没事, 有SSD呀). Find 的功能超级丰富, 足够写一本书的. 所以我只是简单说两句吧. 举例是最有效的记录方法, 不是么?

1, 寻找 abc/def 文件夹里名字类似 123*.jpg 的文件

find -regex ‘.*abc\/def\/123.*\.jpg’

2, 继续上例, 追加 png 文件类型

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’

3, 继续, 找出上面照片里一天内新添加的照片

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24

4, 继续, 把符合条件的照片复制一份到 yesterday 文件夹

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 -exec cp {} ~/yesterday \;

5, CLI(命令行) 也可以和 GUI(图形界面)结合起来, 例如如果我想打开上面命令搜索到的图片的话

find -regextype posix-egrep -regex ‘.*abc\/def\/123.*\.(jpg|png)’ -ctime -24 | while read line; do eog $line &; done;

其中 eog = Eye of Gnome, 是 Gnome 桌面的看图软件. 一下打开不同文件夹里所有符合条件的图片, 是不是比用鼠标一个一个点击要帅很多?

🙂

在 Linux 世界里找东西

tux2今天看到年轻的同事在那费力的找系统里某个文件, 我就指点了一下如何使用 find 命令找文件. 估计同事对我的敬仰又高了些吧, 开玩笑了, 我还羡慕他年轻呢… 说实话我的 Linux 水平也顶多算是唬人阶段, 抽空总结一下, 共勉.

首先是互联网里找某个域名的信息, 用 dig (就是挖), 很简单的.

$ dig raynix.info

; <<>> DiG 9.9.2-P1 <<>> raynix.info
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37258
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 13

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;raynix.info. IN A

;; ANSWER SECTION:
raynix.info. 29 IN A 199.27.134.166
raynix.info. 29 IN A 199.27.135.166

如果查看自己主机到目标主机的网络路径, 使用 traceroute 命令. 我很喜欢此命令, 就好像看着自己魔爪从一个大陆伸向另一个一样.

$ traceroute raynix.info

1 192.168.1.1 (192.168.1.1) 0.347 ms 0.333 ms 0.434 ms #家里路由器
2 10.48.0.1 (10.48.0.1) 11.040 ms 11.093 ms 11.144 ms   #ISP 广域网?
3 meb3-ge2-1-1.gw.optusnet.com.au (198.142.164.33) 13.603 ms 13.630 ms 13.679 ms # ISP 接口
4 xe-6-1-0.md12.optus.net.au (119.225.57.253) 153.394 ms 153.391 ms 153.443 ms # ISP 主干网?
5 * * * # 神秘的有关单位
6 tengige0-3-0-5.lon70.melbourne.telstra.net (165.228.132.193) 210.775 ms 222.452 ms 222.446 ms #更大的 ISP网络
7 bundle-ether2.win18.melbourne.telstra.net (203.50.6.78) 211.002 ms 210.997 ms 211.019 ms
8 bundle-ether2.win-core1.melbourne.telstra.net (203.50.6.113) 212.557 ms 212.570 ms 212.622 ms
9 bundle-ether12.ken-core4.sydney.telstra.net (203.50.11.12) 195.557 ms 195.580 ms 195.631 ms # 到达悉尼了?
10 tengigabitethernet7-1.ken45.sydney.telstra.net (203.50.20.64) 194.599 ms 199.748 ms 200.223 ms
11 pacnet2.lnk.telstra.net (139.130.94.34) 229.498 ms 229.548 ms 229.566 ms # 准备下海
12 te0-2-0-0.cr1.syd5.asianetcom.net (203.192.174.177) 230.787 ms 241.927 ms 241.109 ms #在亚洲某处冒个泡么?
13 gi3-1-0.gw1.syd2.asianetcom.net (203.192.174.186) 207.988 ms 207.977 ms 207.117 ms
14 CDF-0011.asianetcom.net (203.192.167.86) 239.381 ms 240.509 ms 240.476 ms
15 cf-199-27-135-166.cloudflare.com (199.27.135.166) 232.210 ms 232.638 ms 232.722 ms # 232毫秒到达美国西海岸, yay~

在局域网内查看在线的主机/设备我用 nmap 命令. 以前自家局域网也就是两台电脑, 现在不同了, 电脑, 手机和各种 pad 都联网了, 扫描一下没准儿还有蹭网的邻居呢 🙂

$ nmap 192.168.1.1/24

Nmap scan report for 192.168.1.5
Host is up (0.00060s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
80/tcp open http
8000/tcp open http-alt

过两天再写本机找东西的方法  🙂

笔记: Linux CLI 点滴

尽管使用 Linux 很多年了, 我还是经常发现: 哇, 原来还有更方便的方法!

1, 调用前面一条后台执行命令的 PID:

$!

是的, 就是这么简单. 如果想终止前面一条后台运行的指令, 那么

kill $!

就可以了. 我以前还有模有样的用 ps aux | grep 呢…

2, 重复上一条命令:

!!

就是说, 如果敲了一条很长的指令, 结果是忘记了 sudo, 原来我会按 ↑ 呼出上一条命令, 然后按 Home 将光标放到行首, 再嵌入 sudo; 现在只需要 sudo !! 即可了.

3, 显示进度:

一些命令例如 wget 会很好的显示下载进度, 但不是每个命令都如此友好. 例如 mysql, 当你导入一个巨大的 sql 文件时, 除了等待还有什么办法呢? 这时就用上 pv 了. pv = Pipe Viewer.

pv -p backup.sql | mysql database_name -uusername -ppassword -hhost

如果是压缩的 sql 备份, 也轻松串到一起:

pv -p backup.sql.gz | gzip -c -d | mysql database_name -uusername -ppassword -hhost

如有更好方法, 欢迎拍在下面 🙂