设为首页 收藏本站
查看: 1218|回复: 0

[经验分享] 自动化分区脚本的实践

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-4 09:26:01 | 显示全部楼层 |阅读模式
FTP客户端的好处是:可以直接将windows文件系统中的文件拖拽至linux文件系统中,而无须借用U盘转存一、SD卡烧写
1.环境准备
笔记本系统:XP 32位
虚拟机:VMwareWorkstation 9.0
Linux版本:CentOS 6.3 i386
SD卡和读卡器
FTP客户端:FileZilla

2.在linux系统中根目录“/”下新建一个名为filename的目录
1
2
[iyunv@instructor~]# cd /                                           进入根目录
[iyunv@instructor~]# mkdir /filesystem/               创建名为filename的文件夹






3.下载安装FileZilla软件,打开,如下图所示:
wKioL1PdfEHgO9DSAASflJL3LCk745.jpg

主机:这里填写虚拟机中linux系统的IP地址,例如:192.168.5.107
           查看IP地址的命令:ifconfig
用户名:root
密码:root用户的密码

端口:22
填好后点击快速连接,列出文件系统后,表示连接成功
其中左边本地站点列出的是物理机的文件系统,右边列出的是linux的文件系统

4.将文件从windows文件系统传输到linux文件系统中
找到烧写程序所在的路径,如下图所示:
这里mksd-new-14.tar文件就存放在桌面上
wKiom1Pde2mDZsKzAAK5k8tX29w560.jpg


将mksd-new-14.tar文件直接拖动至右边fliename文件夹中,如下图所示:
wKioL1PdfLLRxeVIAAFwr5gXFN0462.jpg


传输进度表
wKiom1Pde8mjE7CWAALUXTlq4Pw843.jpg



传输完成

5.再回到linux系统中查看
1
2
3
[iyunv@instructor~]# cd /filesystem/                       进入filename文件夹中
[iyunv@instructorfilesystem]# ls                             使用ls命令查看文件夹中内容
mksd-new-14.tar.bz2                                              显示文件已传输过来






6.解压文件
1
2
3
[iyunv@instructorfilesystem]# tar -jxvf mksd-new-14.tar.bz2
   
不指定路径则解压到当前目录





以下是解压过程:
1
2
3
4
5
6
7
8
9
10
11
mksd-new-14/
mksd-new-14/vfat/
mksd-new-14/vfat/MLO
mksd-new-14/vfat/boot.scr
mksd-new-14/vfat/u-boot.bin
mksd-new-14/vfat/uImage
mksd-new-14/vfat/system.tar.gz
mksd-new-14/rootfs/
mksd-new-14/rootfs/SD_rootfs.tar
mksd-new-14/rootfs/readme.txt
mksd-new-14/mksd-ti816x-sdx.sh



解压完成
再次执行ls命令
1
2
[iyunv@instructorfilesystem]# ls
mksd-new-14 mksd-new-14.tar.bz2



此时会发现多出了一个与文件同名的文件夹mksd-new-14
7.将SD卡连接电脑
wKioL1PdfRGQu6WnAAKu1eBnlio274.jpg

在linux中连上SD卡
查看SD卡在linux系统中所显示的设备名
1
2
3
4
5
6
7
8
9
10
11
[iyunv@instructormksd-new-14]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_instructor-lv_root
                      7.5G  5.7G 1.7G  78% /
tmpfs                 504M  112K 504M   1% /dev/shm
/dev/sda1             485M   32M 428M   7% /boot
/dev/sdb1             485M   11M 449M   3% /mnt/new
/dev/sdb2              97M   16M  77M  17% /mnt/test
/dev/sr0              3.5G  3.5G    0 100% /media/CentOS_6.3_Final
/dev/sdc1              70M   34M  37M  48% /media/boot
/dev/sdc2             7.3G  215M 6.7G   4% /media/rootfs



可以看到/dev/sdc即为SD的设备名,其中分了两个区

8.执行文件夹中的shell脚本
1
2
3
4
5
6
[iyunv@instructorfilesystem]# cd mksd-new-14                进入mksd-new-14
[iyunv@instructormksd-new-14]# ls –l                         以长文件名的形式列出文件
total 12
-rwxr-xr-x. 1 root root 1126 Jul  8 09:42 mksd-ti816x-sdx.sh       以.sh结尾的即为shell脚本
drwxr-xr-x. 2 root root 4096 Jul  8 09:42 rootfs                    rootfs目录
drwxr-xr-x. 2 root root 4096 Jul  8 09:42 vfat                      vfat目录





执行带参数的脚本
命令格式:mksd-ti816x-sdx.sh 设备名 vfat路径 rootfs文件路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@instructormksd-new-14]# ./mksd-ti816x-sdx.sh /dev/sdc vfat/ rootfs/SD_rootfs.tar
All data on /dev/sdc now will be destroyed!Continue? [y/n]
y
[Partitioning /dev/sdc...]
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.694147 s,1.5 MB/s
DISK SIZE - 7948206080 bytes
CYLINDERS - 966
Checking that no-one is using this diskright now ...
BLKRRPART: Device or resource busy
  
This disk is currently inuse - repartitioning is probably a bad idea.
Umount all file systems,and swapoff all swap partitions on this disk.
Use the --no-reread flagto suppress this check.
Use the --force flag tooverrule all checks.
[Makingfilesystems...]
[Copying files...]
[Done]



注意:上面红色字体的报错信息表示,SD卡的两个分区正在使用,需要卸载后才行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[iyunv@instructormksd-new-14]# umount /dev/sdc1
[iyunv@instructormksd-new-14]# umount /dev/sdc2
[iyunv@instructormksd-new-14]# ./mksd-ti816x-sdx.sh /dev/sdc vfat/ rootfs/SD_rootfs.tar
All data on /dev/sdc now will be destroyed!Continue? [y/n]
y
[Partitioning /dev/sdc...]
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.983607 s,1.1 MB/s
DISK SIZE - 7948206080 bytes
CYLINDERS - 966
Checking that no-one is using this diskright now ...
OK
  
Disk /dev/sdc: 966 cylinders, 255 heads, 63sectors/track
/dev/sdc: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = cylinders of 8225280 bytes, blocksof 1024 bytes, counting from 0
  
  Device Boot Start     End  #cyls    #blocks   Id System
/dev/sdc1  *      0+      8      9-     72261    c W95 FAT32 (LBA)
/dev/sdc2          9    965     957    7687102+ 83  Linux
/dev/sdc3          0       -      0          0    0 Empty
/dev/sdc4          0       -      0          0    0 Empty
Successfully wrote the new partition table
  
Re-reading the partition table ...
  
If you created or changed a DOS partition,/dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[Making filesystems...]
[Copying files...]
[Done]





二、相关命令及参数解释
1.ls
功能说明:列出目录内容
常用参数:
  -1   每列仅显示一个文件或目录名称。
  -a或--all   下所有文件和目录。
2.tar
功能说明:文件打包或解包
常用参数:
-j 通过bzip2进行压缩/解压缩,此时文件名最好为*.tar.bz2
-z 通过gzip进行压缩/解压缩,此时文件名最好为*.tar.gz
-x 解包或解压缩,可以跟 –C来指定压缩文件存放目录,若不指定,则在当前目录解压
-v 在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f 后面跟被处理的文件名
3.cd
功能说明:切换目录
举例:cd 切换至用户家目录
           cd ..返回上一级目录
4.df
功能说明:显示磁盘的相关信息
常用参数:
  -a或--all   包含全部的文件系统。
  --block-size=<区块大小>   以指定的区块大小来显示区块数目。
  -h或--human-readable   以可读性较高的方式来显示信息。


三、脚本详解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[iyunv@instructor mksd-new-14]# cat mksd-ti816x-sdx.sh
#!/bin/bash                                       //使用bash作为解释器
if [[ -z $1 || -z $2  || -z $3 ]] #|| -z $4 ]]    //判断位置变量(脚本后接参数)是否存在
then                                              //若任一参数不存在,则提示脚本用法
        echo "mksd-ti816x Usage:"
        echo "  mksd-ti816x <device> <vfat path> <rootfs tar.gz >"
        echo "  Example: mksd-ti816x /dev/sdc ../vfat nfs.tar.gz"
        exit
fi                                                //if语句结束
if ! [[ -e $2 ]]                                  //如果第二个参数存在,即vfat不存在
then                                              //则提示错误信息并退出脚本
        echo "Incorrect vfat location!"
        exit
fi
if ! [[ -e $3 ]]                   //如果第三个参数不存在,即rootfs/SD_rootfs.tar不存在
then                                             //则提示错误信息并退出脚本
        echo "Incorrect rootfs location!"
        exit
fi                                               //if语句结束
echo "All data on "$1" now will be destroyed! Continue? [y/n]"    //屏幕输出信息,$1代表第一个参数,即SD卡的设备名
read ans                                        //接收用户输入,并存入变量ans
if ! [ $ans == 'y' ]                            //判断,如果用户输入的字符不是"y",则退出
then
        exit
fi                                             //if语句结束
echo "[Partitioning $1...]"                    //屏幕输出信息
DRIVE=$1                                       //将SD卡设备名赋值给DRIVE
dd if=/dev/zero of=$DRIVE bs=1024 count=1024            
         
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`        //使用fdisk命令查看SD设备容量,并截取其容量大小赋值给SIZE变量
         
echo DISK SIZE - $SIZE bytes                    //屏幕输出SIZE大小
  
CYLINDERS=`echo $SIZE/255/63/512 | bc`          //将SIZE转换为柱面大小
  
echo CYLINDERS - $CYLINDERS                    //屏幕输入柱面数
{                                              //使用sfdisk命令将SD卡分为两个区
echo ,9,0x0C,*
echo ,,,-
} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
echo "[Making filesystems...]"
mkfs.vfat -F 32 -n boot "$1"1 &> /dev/null     //将第一个分区使用vfat格式化,命名为boot
mkfs.ext3 -L rootfs "$1"2 &> /dev/null         //将第二个分区使用ext3格式化,命名为rootfs
echo "[Copying files...]"
mount "$1"1 /mnt                               //挂载SD卡第一个分区到 /mnt
cp -rf $2/* /mnt                               //将vfat目录下的所有文件复制到 /mnt下
#cp $2 /mnt/MLO
#cp $3 /mnt/u-boot.bin
#cp $4 /mnt/uImage
umount "$1"1                                   //卸载第一个分区
mount "$1"2 /mnt                               //将第二个分区挂载到 /mnt
tar xvf $3 -C /mnt &> /dev/null                //将rootfs中的SD_rootfs.tar文件解压缩到 /mnt下
chmod 755 /mnt                                 //修改/mnt权限为755
sleep 1                                        //暂停1秒
umount "$1"2                                   //卸载第二个分区
echo "[Done]"





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23170-1-1.html 上篇帖子: 使用OpenSSL 自建CA 以及颁发证书脚本 下篇帖子: Python 条件语句day05
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表