制作一个只运行bash的系统及破坏mbr表并修复

制作一个只运行bash的系统


1、新增一块硬盘,分三个区。

分区1:boot目录100M

分区2:2G,swap分区

分区3:5G,根目录。

其中分区1、3格式化为ext4文件系统,分区2格式化为swap。

2、/mnt下新建两个目录boot和sysroot。

分区1挂载至boot目录,分区3挂载至sysroot目录

grub安装至分区1,复制内核和initramfs至boot目录

[[email protected] ~]# mount /dev/sdb1 /mnt/boot

[[email protected] ~]# ls /mnt/boot

lost+found

[[email protected] ~]# grub-install --root-directory=/mnt /dev/sdb

#安装grub至新增的sdb硬盘,指明目录--root-directory为/mnt目录,grub会自动寻找boot目录

#指明安装的硬盘/dev/sdb

Probing devices to guess BIOS drives. This may take a long time.

Installation finished. No error reported.

This is the contents of the device map /mnt/boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.

(fd0) /dev/fd0

(hd0) /dev/sda

(hd1) /dev/sdb

[[email protected] ~]# cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/boot/vmlinuz

[[email protected] ~]# cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/boot/initramfs.img

# 复制vmlinuz文件和intramfs.img文件至新硬盘boot目录

[[email protected] ~]# ls /mnt/boot

grub  initramfs.img  lost+found  vmlinuz

[[email protected] ~]# vim /mnt/boot/grub/grub.conf

[[email protected] ~]# cat /mnt/boot/grub/grub.conf #在grub目录下创建grub.conf文件,增加内容

default=0

timeout=5

title Centos64 (mylinux)

root (hd0,0)

kernel /vmlinuz selinux=0 ro root=/dev/sda3 init=/bin/bash #kernel的路径和根目录的路径

initrd /initramfs.img

[[email protected] ~]# mount /dev/sdb3 /mnt/sysroot

[[email protected] ~]# ls /mnt/sysroot

lost+found

[[email protected] ~]# cd /mnt/sysroot/

[[email protected] sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp usr home root mnt media

# 创建根文件系统

mkdir: 已创建目录 "etc"

mkdir: 已创建目录 "bin"

mkdir: 已创建目录 "sbin"

mkdir: 已创建目录 "lib"

mkdir: 已创建目录 "lib64"

mkdir: 已创建目录 "dev"

mkdir: 已创建目录 "proc"

mkdir: 已创建目录 "sys"

mkdir: 已创建目录 "tmp"

mkdir: 已创建目录 "usr"

mkdir: 已创建目录 "home"

mkdir: 已创建目录 "root"

mkdir: 已创建目录 "mnt"

mkdir: 已创建目录 "media"

[[email protected] sysroot]# ls

bin  dev  etc  home  lib  lib64  lost+found  media  mnt  proc  root  sbin  sys  tmp  usr

[[email protected] sysroot]# cp /bin/bash ./bin/ #复制bash程序至新硬盘,目录要与原bash路径一致

[[email protected] sysroot]# ls ./bin/

bash

[[email protected] sysroot]# ldd /bin/bash #查看bash所依赖的库,并复制到新硬盘对应目录下

linux-vdso.so.1 =>  (0x00007fff2b3f4000)

libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003532a00000)

libdl.so.2 => /lib64/libdl.so.2 (0x0000003530a00000)

libc.so.6 => /lib64/libc.so.6 (0x0000003530600000)

/lib64/ld-linux-x86-64.so.2 (0x0000003530200000)

[[email protected] sysroot]# cd /lib64

[[email protected] lib64]# cp libtinfo.so.5 libdl.so.2 libc.so.6 ld-linux-x86-64.so.2 /mnt/sysroot/lib64

[[email protected] lib64]# ls /mnt/sysroot/lib64

ld-linux-x86-64.so.2  libc.so.6  libdl.so.2  libtinfo.so.5

[[email protected] lib64]# chroot /mnt/sysroot/ #测试bash是否正常

bash-4.1# type type #bash内置命令可用,外置命令不可用。

type is a shell builtin

bash-4.1# type cat

bash: type: cat: not found

bash-4.1# exit

exit

[[email protected] lib64]# init 0

找到刚刚添加的硬盘的路径,新创建一个虚拟机使用刚才添加的硬盘。

添加完成后即可启动系统进入bash

破坏mbr表并修复:


方法一:磁盘中可以没有boot目录

[[email protected] ~]# dd if=/dev/sda of=/root/mbr.bak count=1 bs=512 #备份mbr表

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.000419863 s, 1.2 MB/s

[[email protected] ~]# dd if=/dev/zero of=/dev/sda count=1 bs=200 #破坏mbr表前200字节

1+0 records in

1+0 records out

200 bytes (200 B) copied, 0.000233899 s, 855 kB/s

[[email protected] ~]# sync #把刚才的操作同步至磁盘

[[email protected] ~]# grub-install --root-directory=/ /dev/sda #安装新的

Installation finished. No error reported.

This is the contents of the device map //boot/grub/device.map.

Check if this is correct or not. If any of the lines is incorrect,

fix it and re-run the script `grub-install'.

# this device map was generated by anaconda

(hd0)     /dev/sda

方法二:磁盘中要有boot目录,并且包含stage1,stage1_5,stage2文件

[[email protected] ~]# dd if=/dev/zero of=/dev/sda count=1 bs=200

1+0 records in

1+0 records out

200 bytes (200 B) copied, 0.000163216 s, 1.2 MB/s

[[email protected] ~]# sync

[[email protected] ~]# grub

Probing devices to guess BIOS drives. This may take a long time.

GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported.  For the first word, TAB

lists possible command completions.  Anywhere else TAB lists the possible

completions of a device/filename.]

grub> root (hd0,0) #指明根所在的分区

root (hd0,0)

Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0) #指明安装的磁盘

setup (hd0)

Checking if "/boot/grub/stage1" exists... no

Checking if "/grub/stage1" exists... yes

Checking if "/grub/stage2" exists... yes

Checking if "/grub/e2fs_stage1_5" exists... yes

Running "embed /grub/e2fs_stage1_5 (hd0)"...  27 sectors are embedded.

succeeded

Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded

Done.

grub> quit

quit

[[email protected] ~]# sync

方法三:光盘引修复

bash-4.1# chroot /mnt/sysimage/

sh-4.1# ls #查看系统中的文件

sh-4.1# grub-install --root-directory=/ /dev/sda #安装mbr

原文地址:http://blog.51cto.com/11975865/2063367

时间: 2024-10-11 08:37:48

制作一个只运行bash的系统及破坏mbr表并修复的相关文章

剑指offer-面试题50-第一个只出现一次的字符-哈希表

/* 题目: 求字符串第一个只出现一次的字符. */ /* 思路: 使用map遍历两次,第一次计数,第二次找到计数为1的第一个字符. */ #include<iostream> #include<cstring> #include<vector> #include<algorithm> #include<map> using namespace std; char FirstNotRepeatingChar(string str){ map<

制作一个最小的CentOS6系统

制作一个最小的CentOS6系统 首先要明确一下CentOS6启动的过程 POST -> BootSequence(BIOS) -> Bootloader(MBR) -> Kernel(ramdisk) -> rootfs -> switchroot -> /sbin/init -> (/etc/inittab,/etc/init/*.conf) -> 设置默认运行级别 -> 系统初始化脚本 ->关闭或启动对应级别下的服务 -> 启动终端

多次单击快捷方式,只运行一个程序实例

在应用程序安装之后,单击一次快捷方式,就运行一个程序实例,对于资源独占型程序来说,这样是不可以的,比如该程序使用了当前系统的某个端口,当同样的程序再次运行,再次试图占用同一个端口次,会提示"端口已经被占用的"异常.如此,必须在启动应用程序时,必须判断该程序是否已经有一个实例在运行.下面这个类中先判断该程序的实例有没有在运行,使用线程同步类EventWaitHandle(Boolean, EventResetMode, String)及注册正在等待 WaitHandle 的委托方法Reg

vc++高级班之窗口篇[4]---让程序只运行一个实例

大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是否已经设置了某些特定标志,是否创建了一些全局唯一的东西,或者让程序的多个实例都能看到的东西, 如果有则说明已经有一个实例在运行了,则当前程序通知用户如何如何,然后程序退出,当然方法有很多种,各有各的优缺点! ①.创建互斥体 Mutex 法: 但是单纯的使用互斥体的话不能取得已经创建的实例窗口局柄,因此无

WINCE程序只运行一个,防止多重运行。

在 winform中,程序只运行一个,防止多重运行,很容易.如用FindWindow.Mutex和C#直接Process遍历,都可以实现. 但是,到了WINCE 系统中,要么方法不存在,即使引入CreateMutex,也是白搭.根本无效. 从网上找到一篇通过系统快照方式的方案.不过,大侠们写的都不完整,我特地贡献一个可以直接使用的类: using System.IO; using System.Runtime.InteropServices; //可能还缺其他using,,,,没仔细看. pub

逆向学习XX客户端如何只运行一个实例

个人认为学习分两种, 一种是当面请教和直接从书本网络中的资料学习. 其二就是看着令你惊叹的作品-顿悟. 什么?顿悟不了?那我们就一起来逆向学习吧!差点忘了,我并不打算提供Demo,这并不重要,难道你打算遇到一个相同的情景?重在方法. 注意: 本文为了照顾新手人群,对于某些内容可能会非常详细的推演. 名词解释: 一个实例:一个对象,这里指一个程序被创建后在内存中的数量.大白话就是:成功运行了几次. 事由: 今天闲来无事(忙里偷闲)运行了两次Dr_COM的宽带认证客户端.如咱所料, 如图: 我们知道

Linux系统裁减之,制作一个极度精简的Linux-3-为精简的系统增加网络功能和关机重启功能

第3章 为精简的Linux系统增加网络功能和开关机功 在阅读这篇博文之前,建议先阅读我的上两篇博文,而且最好按顺序阅读:(不然可能会觉得我写得不知所云,呵呵!) 第1篇:Linux系统裁减之,制作一个极度精简的Linux-1http://blog.51cto.com/linuxprince/2045703 第2篇:Linux系统裁减之,制作一个极度精简的Linux-2-用脚本实现自动拷贝命令和依赖库文件http://blog.51cto.com/linuxprince/2046142 3.1 为

只运行一个实例以及内存泄漏检测

unit 使应用程序只运行一个实例; interface uses Windows; const  // - 互斥体唯一的名字  _Mutex_Name = '{19631971-1976-1981-1989-199319941995}'; var  _Mutex_Handle: THandle; implementation initialization // - 载入时调用的代码 // - 创建互斥体对象_Mutex_Handle := CreateMutex(nil, False, LPC

用命名事件对象来实现只运行一个实例

1.添加CWinApp派生类的成员变量 HANDLE _hEvent; 2.在InitInstance中创建命名事件对象,并设置为有信号状态 //创建事件对象,可用命名事件对象来控制只运行一个实例     _hEvent=CreateEvent(NULL,                                              FALSE,                                  //TRUE人工重置,FALSE 自动重置