凌云(LingCloud)云计算系统开源版本发布

2011/06/01 | 09:46 | 分类:Linux与开源 | 标签: | 2,469次阅读

  凌云(LingCloud)是中国科学院计算技术研究所分布式与云计算研究团队研发的一套云计算系统软件。它旨在解决云计算系统中异构负载支持、多租户资源租赁、系统高效整合等问题。凌云的技术特点包括:(1)异构应用模式支持——一套系统同时支持虚拟化资源租赁、高性能计算、大规模数据处理和海量存储应用模式,也支持其他应用模式直接接入;(2)单一控制点——提供单一逻辑视图,资源类型对用户透明;使用统一的用户界面和 API 进行管理,操作范围既可以面向系统,也可以面向应用;(3)无干扰的应用运行时管理——在云集中管理模式的前提下尽可能减小系统对应用运行时的干涉,保证应用性能与资源利用率,利于应用迁移和遗留系统接入;(4)多租户支持——在相同物理资源、单一系统实例上提供多租户环境,为云租户提供全局账号单一登录、安全与性能隔离,支持按使用量记账。凌云具备自主、集约、高效、安全和易用的优势,它适合构建面向政府、企业、学校与科研机构的私有云,也适合管理面向数据中心的公有云。凌云系统目前已经在国内若干家科研单位生产性使用。
  为促进中国云计算产业的发展,加强学术界与产业界的交流,研究团队决定将系统逐步开源。凌云首个开源版本已于 2011 年 5 月正式上线,以 Apache License 2.0 授权发布。凌云开源版本侧重于 IaaS 层服务,据我们了解它是国内首款开源的 IaaS 层云计算系统。开源版本的核心是凌云弹性计算基础设施软件——Molva,它将计算、存储、网络等资源抽象为可租赁的资产接入系统,按照不同的应用模式或使用方式对资产进行统一分区化组织与管理。当前版本可构建私有云,通过 web portal 进行物理机群与虚拟机群租赁管理、虚拟电器(virtual appliance)在线封装等操作。系统主体采用 SOA 架构,使用 Java 技术路线实现;虚拟化实现基于 Xen 平台,并使用 OpenNebula 管理虚拟机群。未来版本还将继续开放其他特色鲜明的功能模块。

凌云(LingCloud)云计算系统开源版本发布
凌云(LingCloud)体系结构

  凌云系统的学术论文[1]已发表于 2011 年 5 月在韩国釜山举行的第 9 届 IEEE 并行与分布式处理及应用国际会议(IEEE International Symposium on Parallel and Distributed Processing with Applications, ISPA 2011),并获得最佳论文奖(Best Paper Award)。凌云开源消息在大会的发布引起了国内外同行的关注。
  在凌云弹性计算基础设施管理平台之上,研究团队还基于 Hadoop 开发并增强了位于 PaaS 层的大规模数据处理平台,能够提供高可靠性、良好扩展性和强灵活性的大规模数据处理服务。其中,以行/列混合存储(RCFile [2])和聚簇互补索引(CCIndex [3])为代表的关键技术已成功应用于 Facebook 等国内外大型互联网企业的生产性运行系统。
  凌云开源项目网站是 http://lingcloud.org。诚挚欢迎有志于云计算的团队或个人参与凌云开发,或以其他形式与凌云合作,共同为中国云计算事业的发展贡献力量。


[1] Xiaoyi Lu, Jian Lin, Li Zha, Zhiwei Xu. Vega LingCloud: A Resource Single Leasing Point System to Support Heterogeneous Application Modes on Shared Infrastructure. The 9th IEEE International Symposium on Parallel and Distributed Processing with Applications (ISPA 2011), 2011, pp.99-106. (Best Paper Award)

[2] Yongqiang He, Rubao Lee, Yin Huai, Zheng Shao, Namit Jain, Xiaodong Zhang, Zhiwei Xu. RCFile: A Fast and Space-efficient Data Placement Structure in MapReduce-based Warehouse Systems. The 27th International Conference on Data Engineering (ICDE 2011), 2011, pp.1199-1208.

[3] Yongqiang Zou, Jia Liu, Shicai Wang, Li Zha, Zhiwei Xu. CCIndex: A Complemental Clustering Index on Distributed Ordered Tables for Multi-dimensional Range Queries. The 7th IFIP International Conference on Network and Parallel Computing (NPC 2010), 2010, pp.247-261. (Finalist for Best Paper Award)

QEMU VNC 访问 CentOS 虚拟机时“双鼠标指针”问题的解决

2010/12/22 | 23:58 | 分类:Linux与开源 | 标签: | 4,401次阅读

  前文提到过,在虚拟硬件配置中使用绝对定位设备(tablet)取代相对定位设备(mouse)是解决 QEMU VNC 访问 Xen 虚拟机时“双鼠标指针”问题的办法之一。这种办法对于 Windows 和 Ubuntu 虚拟机都有效,无需在虚拟机操作系统内做额外配置。但这对于 CentOS 虚拟机无效,初步判断是 CentOS 没有相应的 tablet 设备驱动。不过经实验发现,CentOS 中已包含相应驱动,只是没有对 X 进行适当的配置。只要对 CentOS 虚拟机进行以下配置,即可使两个鼠标指针同步移动:

  1、确保系统中存在 evdev 驱动模块:/usr/lib/xorg/modules/input/evdev_drv.so(x86_64 系统为 /usr/lib64/xorg/modules/input/evdev_drv.so)。

  2、在 proc 文件系统下查看 QEMU USB Tablet 对应的 event 设备名。在本例中为 event2。

  1. $ cat /proc/bus/input/devices
  2.  
  3. I: Bus=0003 Vendor=0627 Product=0001 Version=0000
  4. N: Name="QEMU 0.8.2 QEMU USB Tablet"
  5. P: Phys=usb-0000:00:01.3-2/input0
  6. S: Sysfs=/class/input/input2
  7. H: Handlers=mouse1 event2 js0
  8. B: EV=b
  9. B: KEY=70000 0 0 0 0 0 0 0 0
  10. B: ABS=103

  3、修改 xorg.conf,添加一个 InputDevice(本例中命名为“MouseTS”),并将其加入 ServerLayout 段。其中 Device 选项的值参考上一步找到的 event 设备名。

  1. $ vi /etc/X11/xorg.conf
  2.  
  3. Section "ServerLayout"
  4.         Identifier     "Default Layout"
  5.         Screen      0  "Screen0" 0 0
  6.         InputDevice    "Keyboard0" "CoreKeyboard"
  7.         InputDevice    "MouseTS" "CorePointer"
  8. EndSection
  9.  
  10. Section "InputDevice"
  11.         Identifier     "MouseTS"
  12.         Driver         "evdev"
  13.         Option         "Device" "/dev/input/event2"
  14.         Option         "DeviceName" "touchscreen"
  15. EndSection

  参考:
  http://thread.gmane.org/gmane.comp.emulators.qemu/11516
  http://forums.opensuse.org/english/get-help-here/hardware/418972-usb-mouse-device-problem.html

远程访问虚拟机时“双鼠标指针”问题的简单解决

2010/12/18 | 23:41 | 分类:Linux与开源 | 标签: | 3,759次阅读

  Xen 自带的 QEMU VNC 和 VirtualBox 自带 VRDP 允许用户通过 VNC/RDP 协议远程访问虚拟机图形界面。但有时我们发现远程访问窗口中会出现双鼠标指针:一个是客户端的,一个是虚拟机的,二者移动并不同步,导致难以精确定位。这个问题的缘由是远程访问协议转换鼠标绝对坐标与相对坐标时重复应用了鼠标加速(参考 Red Hat bugzilla 上的描述[1][2])。要解决这个问题,通常的方法包括:1.在虚拟机内安装附加组件(如 VirtualBox Guest Additions);2.在虚拟机内安装 VNC/RDP Server;3.在虚拟硬件配置中使用绝对定位设备(tablet)取代相对定位设备(mouse);4.使用上述 bugzilla 条目中提到的修改过的远程访问工具。如果出于种种原因不便于在宿主机上做修改,或没有管理员权限在虚拟机上安装这些工具,其实也有简单的解决方法,即在虚拟机操作系统内禁用鼠标加速
  在 Windows XP 虚拟机下,只需要在控制面板内打开“鼠标”属性,去掉“指针选项”页面内“提高指针精确度”前面的勾。其对应的注册表项目如下:

  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_CURRENT_USER\Control Panel\Mouse]
  4.  
  5. "MouseSpeed"="0"
  6. "MouseThreshold1"="0"
  7. "MouseThreshold2"="0"

  需要注意的是,这一配置只针对登录用户有效。用户登录之前仍存在双鼠标指针。
  在运行 X 的 Linux 虚拟机下,最简单的方法是执行“xset m 0 0”命令立即禁用鼠标加速。针对不同的桌面环境,可将这一命令加入相应的启动项。例如对于 Gnome,可在 /usr/share/gnome/autostart 目录下创建名为 xset.desktop、内容如下的文件:

  1. [Desktop Entry]
  2. Name=No name
  3. Encoding=UTF-8
  4. Version=1.0
  5. Exec=xset m 0 0
  6. X-GNOME-Autostart-enabled=true

  注意,这一配置也只有在登录 Gnome 之后才生效。用户登录之前仍存在双鼠标指针。
  而对于较新版本的 X,推荐的方法是在 xorg.conf 中加入以下配置(参考[1][2],暂未实验),这一配置是全局性的:

  1. Section "InputDevice"
  2. Option "AccelerationProfile" "-1"
  3. Option "AccelerationScheme" "none"
  4. EndSection

  针对 Gnome 桌面,另一种方法是在“鼠标首选项”(可通过“gnome-mouse-properties”命令打开)内找到“加速”滑块,仔细试验将其滑动到适当位置,即可保证两个鼠标指针同步移动。对应的配置在 ~/.gconf/desktop/gnome/peripherals/mouse/%gconf.xml 文件中,当 motion_acceleration 属性取值为 1 时鼠标无加速:

  1. <entry name="motion_acceleration" mtime="..." type="float" value="1">

  事实上,禁用鼠标加速并没有真正消除两个指针,而只是使它们同步移动。我们还需要使二者尽可能重合,因此有时候需要利用屏幕边角人工对准两个指针,多试试就能够掌握技巧。最完美的方案仍是在虚拟机内安装 VNC/RDP Server。

从磁盘映像中挂载或提取指定的 LVM 逻辑卷

2009/10/19 | 13:40 | 分类:Linux与开源 | 标签: | 5,004次阅读

  前面提到了如何从磁盘映像中挂载或提取指定分区,现在我们再看看如何从含有 LVM 分区的映像中挂载或提取指定的逻辑卷(LV)。由于 LVM 分区内部有自己的盘区(PE)分配方法,因此逻辑卷在映像中并不一定是物理连续的,不能通过找到其偏移地址直接挂载。不过只要本地系统安装了 LVM 支持,就可以使用 LVM 自带的实用工具完成硬盘映像中逻辑卷的挂载。
  首先查看一下本地系统已经挂载过的物理卷(PV)、卷组(VG)和逻辑卷。我们看到,系统已经安装并激活了 VolGroup01 卷组。事实上 VolGroup01 中的 LogVol00 是本地系统的根分区,LogVol01 是交换分区。

  1. [root@centos CentOS]# pvscan
  2.   PV /dev/sda2   VG VolGroup01   lvm2 [136.00 GB / 0    free]
  3.   Total: 1 [136.00 GB] / in use: 1 [136.00 GB] / in no VG: 0 [0   ]
  4. [root@centos CentOS]# vgscan
  5.   Reading all physical volumes.  This may take a while...
  6.   Found volume group "VolGroup01" using metadata type lvm2
  7. [root@centos CentOS]# lvscan
  8.   ACTIVE            '/dev/VolGroup01/LogVol00' [134.06 GB] inherit
  9.   ACTIVE            '/dev/VolGroup01/LogVol01' [1.94 GB] inherit

  实验使用的 centos5-2-gnome.img 是一个安装了 CentOS 并通过 LVM 管理磁盘的映像文件。使用 fdisk 命令查看其分区结构,其中 centos5-2-gnome.img2 是 LVM 分区,fdisk 不能提供 LVM 的详细信息。

  1. [root@centos CentOS]# fdisk -l -u centos5-2-gnome.img
  2. last_lba(): I don't know how to handle files with mode 81a4
  3. You must set cylinders.
  4. You can do this from the extra functions menu.
  5.  
  6. Disk centos5-2-gnome.img: 0 MB, 0 bytes
  7. 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
  8. Units = sectors of 1 * 512 = 512 bytes
  9.  
  10.               Device Boot      Start         End      Blocks   Id  System
  11. centos5-2-gnome.img1   *          63      208844      104391   83  Linux
  12. centos5-2-gnome.img2          208845     8385929     4088542+  8e  Linux LVM

  使用 Linux 的 loop 设备控制命令——losetup:首先用 -f 参数查找一个空闲的 loop 节点;然后通过 -o 参数指定 LVM 分区在映像中的偏移量(参考 fdisk 的输出),将其挂载在空闲的 loop 节点上;最后使用 -a 参数确认挂载成功。

  1. [root@centos CentOS]# losetup -f
  2. /dev/loop4
  3. [root@centos CentOS]# losetup -o $((208845*512)) /dev/loop4 centos5-2-gnome.img
  4. [root@centos CentOS]# losetup -a
  5. ...
  6. /dev/loop4: [fd00]:26706086 (centos5-2-gnome.img), offset 106928640

  再一次查看系统中存在的 LVM 设施。我们看到,映像中的 VolGroup00 卷组已被扫描到,其中有 LogVol00、LogVol01 两个未激活的分区。

  1. [root@centos CentOS]# pvscan
  2.   PV /dev/loop4   VG VolGroup00   lvm2 [3.88 GB / 0    free]
  3.   PV /dev/sda2    VG VolGroup01   lvm2 [136.00 GB / 0    free]
  4.   Total: 2 [139.88 GB] / in use: 2 [139.88 GB] / in no VG: 0 [0   ]
  5. [root@centos CentOS]# vgscan
  6.   Reading all physical volumes.  This may take a while...
  7.   Found volume group "VolGroup00" using metadata type lvm2
  8.   Found volume group "VolGroup01" using metadata type lvm2
  9. [root@centos CentOS]# lvscan
  10.   inactive          '/dev/VolGroup00/LogVol00' [2.91 GB] inherit
  11.   inactive          '/dev/VolGroup00/LogVol01' [992.00 MB] inherit
  12.   ACTIVE            '/dev/VolGroup01/LogVol00' [134.06 GB] inherit
  13.   ACTIVE            '/dev/VolGroup01/LogVol01' [1.94 GB] inherit

  这个例子中,映像中的卷组与本地已挂载的卷组名称不同,不会出现歧义。但如果映像中的卷组恰与本地已挂载的卷组重名,则可以使用 vgrename 命令修改映像中的卷组名称。

  1. [root@centos CentOS]# vgrename --help
  2.   vgrename: Rename a volume group
  3.  
  4. vgrename
  5.         [-A|--autobackup y|n]
  6.         [-d|--debug]
  7.         [-h|--help]
  8.         [-t|--test]
  9.         [-v|--verbose]
  10.         [--version]
  11.         OldVolumeGroupPath NewVolumeGroupPath |
  12.         OldVolumeGroupName NewVolumeGroupName

  使用 vgchange 命令激活 VolGroup00 卷组,再次查看逻辑卷的状态,LogVol00、LogVol01 已经可用。

  1. [root@centos CentOS]# vgchange -ay VolGroup00
  2.   2 logical volume(s) in volume group "VolGroup00" now active
  3. [root@centos CentOS]# lvscan
  4.   ACTIVE            '/dev/VolGroup00/LogVol00' [2.91 GB] inherit
  5.   ACTIVE            '/dev/VolGroup00/LogVol01' [992.00 MB] inherit
  6.   ACTIVE            '/dev/VolGroup01/LogVol00' [134.06 GB] inherit
  7.   ACTIVE            '/dev/VolGroup01/LogVol01' [1.94 GB] inherit

  现在便可以使用 lvscan 输出的逻辑卷设备文件名来挂载对应的文件系统了。

  1. [root@centos CentOS]# mount /dev/VolGroup00/LogVol00 ./part/
  2. [root@centos CentOS]# ls ./part/
  3. bin  boot  dev  etc  home  lib  lost+found  media  misc  mnt
  4. net  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
  5. [root@centos CentOS]# umount ./part/

  如果要提取其中的分区,也可以直接对逻辑卷设备文件或 /dev/mapper/ 下对应的设备文件操作。

  1. [root@centos CentOS]# dd if=/dev/VolGroup00/LogVol00 of=LogVol00.img
  2. 6094848+0 records in
  3. 6094848+0 records out
  4. 3120562176 bytes (3.1 GB) copied, 113.93 seconds, 27.4 MB/s

  试挂载提取出来的分区。

  1. [root@centos CentOS]# mount -o loop LogVol00.img ./part/
  2. [root@centos CentOS]# ls ./part/
  3. bin  boot  dev  etc  home  lib  lost+found  media  misc  mnt
  4. net  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
  5. [root@centos CentOS]# umount ./part/

  卸载文件系统之后,别忘了卸载卷组和 loop 节点。

  1. [root@centos CentOS]# vgchange -an VolGroup00
  2.   0 logical volume(s) in volume group "VolGroup00" now active
  3. [root@centos CentOS]# losetup -d /dev/loop4

从磁盘映像中挂载或提取指定分区

2009/10/11 | 22:48 | 分类:Linux与开源 | 标签: | 3,758次阅读

  最近在做虚拟机相关的事,需要处理一些磁盘和分区的映像文件。如何从一个磁盘映像中挂载指定的分区到本地 Linux 文件系统呢?理论上说,可以用 dd 把该分区从磁盘映像中提取出来再挂载,不过 mount 提供了针对 loop 设备的偏移量参数,方便直接从磁盘映像中挂载指定分区。笔记如下:
  演示用的磁盘映像使用 qemu-img 制作。我们使用原生的 raw 格式,等价于磁盘上的原始数据流,保证它在任何 Linux 系统上都可以直接挂载。使用 Windows PE 工具盘启动该 qemu 虚拟机,创建一系列不同格式的分区并在其中建立几个文件。

  1. root@lj-laptop:/opt/vm# qemu-img create -f raw vmtest.img 5G
  2. root@lj-laptop:/opt/vm# qemu -hda ./vmtest.img -cdrom /dev/cdrom -boot d -m 256M -localtime

  磁盘分区结构如截图:
从磁盘映像中挂载或提取指定分区
  回到宿主系统,使用 fdisk 的 -l、-u 参数查看磁盘映像。其中 -u 表示以扇区为单位显示分区起止位置,方便后续计算。

  1. root@lj-laptop:/opt/vm# fdisk -l -u vmtest.img
  2. You must set cylinders.
  3. You can do this from the extra functions menu.
  4.  
  5. Disk vmtest.img: 0 MB, 0 bytes
  6. 255 heads, 63 sectors/track, 0 cylinders, total 0 sectors
  7. Units = sectors of 1 * 512 = 512 bytes
  8. Disk identifier: 0xbd86bd86
  9.  
  10.      Device Boot      Start         End      Blocks   Id  System
  11. vmtest.img1              63     8193149     4096543+  83  Linux
  12. vmtest.img2         8193150    10249469     1028160    5  Extended
  13. vmtest.img3        10249470    10474379      112455    6  FAT16
  14. vmtest.img5         8193213     8610839      208813+  83  Linux
  15. vmtest.img6         8610903     9028529      208813+  82  Linux swap / Solaris
  16. vmtest.img7         9028593    10249469      610438+   b  W95 FAT32

  这时我们只需要为 mount 添加 offset 参数,指定分区在磁盘映像中的逻辑地址,即可挂载这一分区。注意 offset 的单位是字节,通常一个扇区是 512 字节,因此需要用 fdisk 输出的 Start 乘以 512。以 vmtest.img3 分区为例。

  1. root@lj-laptop:/opt/vm# mount -o loop,offset=$((10249470*512)) vmtest.img ./part/
  2. root@lj-laptop:/opt/vm# ls ./part/
  3. InFAT16.txt
  4. root@lj-laptop:/opt/vm# umount ./part/

  如果有必要,我们可以将特定的分区从硬盘映像中提取出来,方便单独使用。通过 dd 可以完成提取,简便起见使用扇区大小 512 字节作为 bs 参数,这样 skip、count 参数很容易从 fdisk 的输出中计算出来。下面提取 vmtest.img5。

  1. root@lj-laptop:/opt/vm# dd if=vmtest.img of=linux2.img bs=512 skip=8193213 count=$((8610839-8193213+1))
  2. 417627+0 records in
  3. 417627+0 records out
  4. 213825024 bytes (214 MB) copied, 4.67434 s, 45.7 MB/s
  5. root@lj-laptop:/opt/vm# mount -o loop linux2.img ./part/
  6. root@lj-laptop:/opt/vm# ls ./part/
  7. InLinux2.txt  lost+found
  8. root@lj-laptop:/opt/vm# umount ./part/

  到这一步,我们已经实现了从磁盘映像中挂载或提取指定分区。其中 fdisk 帮我们完成了磁盘映像的分析,直接将分区的逻辑地址显示给了我们。现在我们再借机复习一下磁盘分区表的格式,试试手工计算相关地址。这里推荐大家阅读网上这篇《解读 Windows 操作系统分区表的秘密》,其中详解过的概念这里不再赘述,下面的内容权当对这篇文章在 Linux 平台下的补充。
  首先查看磁盘映像的主引导扇区,其中分区表位于 0x1be 开始的 64 字节。

  1. root@lj-laptop:/opt/vm# cat vmtest.img | xxd | head -32
  2. ...
  3. 00001b0: 0000 0000 0000 0000 86bd 86bd 0000 0001  ................
  4. 00001c0: 0100 83fe 7ffd 3f00 0000 3f04 7d00 0000  ......?...?.}...
  5. 00001d0: 41fe 05fe bf7d 7e04 7d00 8060 1f00 0000  A....}~.}..`....
  6. 00001e0: 817e 06fe bf8b fe64 9c00 8e6e 0300 0000  .~.....d...n....
  7. 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.

  对于 vmtest.img1 和 vmtest.img3 这两个主分区,我们读出它们的起始逻辑地址分别为 0x3f 和 0x9c64fe(注意在分区表中以 Little-endian 存储),换算成十进制与 fdisk 输出的一致。bash 的算术表达式支持十六进制字面值,挂载方式同上。

  1. root@lj-laptop:/opt/vm# mount -o loop,offset=$((0x3f*512)) vmtest.img ./part/
  2. root@lj-laptop:/opt/vm# ls ./part/
  3. InLinux.txt  lost+found
  4. root@lj-laptop:/opt/vm# umount ./part/
  5. root@lj-laptop:/opt/vm# mount -o loop,offset=$((0x9c64fe*512)) vmtest.img ./part/
  6. root@lj-laptop:/opt/vm# ls ./part/
  7. InFAT16.txt
  8. root@lj-laptop:/opt/vm# umount ./part/

  对于扩展分区 vmtest.img2,我们通过 dd 定位到它所指向的第一个逻辑分区 vmtest.img5 前面的卷引导记录,查看逻辑分区的链式分区表。

  1. root@lj-laptop:/opt/vm# dd if=vmtest.img bs=512 skip=$((0x7d047e)) | xxd | head -32
  2. ...
  3. 00001b0: 0000 0000 0000 0000 0000 0000 0000 0001  ................
  4. 00001c0: 41fe 83fe bf17 3f00 0000 5b5f 0600 0000  A.....?...[_....
  5. 00001d0: 8118 05fe bf31 9a5f 0600 9a5f 0600 0000  .....1._..._....
  6. 00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  7. 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.

  vmtest.img5 相对于 vmtest.img2 的偏移量为 0x3f,按此地址挂载。

  1. root@lj-laptop:/opt/vm# mount -o loop,offset=$(((0x7d047e+0x3f)*512)) vmtest.img ./part/
  2. root@lj-laptop:/opt/vm# ls ./part/
  3. InLinux2.txt  lost+found
  4. root@lj-laptop:/opt/vm# umount ./part/

  沿着链式分区表的第二条记录(即链表指针)指示的偏移量,我们可以找到第二、第三个逻辑分区(vmtest.img6、vmtest.img7)前面的卷引导记录以及这两个分区的逻辑地址。

  1. root@lj-laptop:/opt/vm# dd if=vmtest.img bs=512 skip=$((0x7d047e+0x65f9a)) | xxd | head -32
  2. ...
  3. 00001b0: 0000 0000 0000 0000 0000 0000 0000 0001  ................
  4. 00001c0: 8118 82fe bf31 3f00 0000 5b5f 0600 0000  .....1?...[_....
  5. 00001d0: 8132 05fe bf7d 34bf 0c00 4ca1 1200 0000  .2...}4...L.....
  6. 00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  7. 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.
  8. root@lj-laptop:/opt/vm# dd if=vmtest.img bs=512 skip=$((0x7d047e+0xcbf34)) | xxd | head -32
  9. ...
  10. 00001b0: 0000 0000 0000 0000 0000 0000 0000 0001  ................
  11. 00001c0: 8132 0bfe bf7d 3f00 0000 0da1 1200 0000  .2...}?.........
  12. 00001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  13. 00001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
  14. 00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.

  取得了相应的地址,挂载或提取分区当然是轻而易举的。下面挂载了 vmtest.img7、提取了 vmtest.img5。

  1. root@lj-laptop:/opt/vm# mount -o loop,offset=$(((0x7d047e+0xcbf34+0x3f)*512)) vmtest.img ./part/
  2. root@lj-laptop:/opt/vm# ls ./part/
  3. InFAT32.txt
  4. root@lj-laptop:/opt/vm# umount ./part/
  5. root@lj-laptop:/opt/vm# dd if=vmtest.img of=linux2.img bs=512 skip=$((0x7d047e+0x3f)) count=$((0x65f5b))
  6. 417627+0 records in
  7. 417627+0 records out
  8. 213825024 bytes (214 MB) copied, 4.65149 s, 46.0 MB/s
  9. root@lj-laptop:/opt/vm# mount -o loop ./linux2.img ./part/
  10. root@lj-laptop:/opt/vm# ls ./part/
  11. InLinux2.txt  lost+found
  12. root@lj-laptop:/opt/vm# umount ./part/
页面: 上页(较新) 1 2 下页(较旧)