2011年12月12日星期一

设置 Eclipse 以在 Java 程序中调用 CPLEX

前提当然是要成功安装CPLEX,我的系统为 Ubuntu 9.10 Karmic + CPLEXStudioAcademic123(安装在 /opt/ibm/ILOG/CPLEXStudioAcademic123/ 下)

我的做法是:

  1. 在
    /opt/ibm/ILOG/CPLEX_Studio_Academic123/cplex/lib

    下找到 cplex.jar

  2. 在
    /opt/ibm/ILOG/CPLEX_Studio_Academic123/cplex/bin/x86-64_sles10_4.1

    下找到 libcplex123.so

  3. 拷贝 cplex.jar 与 libcplex123.so 到 Eclipse 根目录 {EclipseHomeDir} 下的 needed/cplex 子目录中

首先在编译路径中加入CPLEX Jar 包,以便代码能够正确编译

(1). Project > Properties > Java Build Path > Libraries
(2). Add External JARs.
(3). Browse to the location of your CPLEX installation and select the file named cplex.jar.

For me,即是加入外部 Jar 包 {EclipseHomeDir}/needed/cplex/cplex.jar

如此程序即可正确编译,但还不能正常运行。

IBM ILOG CPLEX 官网上的 Tutorial 提及这一问题,并给出解决方案如下:

(http://publib.boulder.ibm.com/infocenter/cosinfoc/v12r3/index.jsp)

(CPLEX > Getting Started with CPLEX > Setting up CPLEX > Setting up Eclipse for the Java API of CPLEX)

Before you can run your compiled code, you must create an appropriate run configuration in Eclipse or modify an existing run configuration appropriately. To do so, follow these steps.
1. ...
2. ...
3. Go to the Arguments tab, select VM arguments, and add the path to the CPLEX library. The CPLEX library is conventionally a DLL file on Windows or a .so file on UNIX or GNU/Linux, with an indication of the version number in its name, like cplexXX.dll or cplexXX.so where XX represents a version number of the product.

Tip:
Add the path to the directory or folder containing the CPLEX library (not the name of the file itself).

For example, on UNIX or GNU/Linux , if the file libcplexXX.so is located in the directory COSinstallation/cplex/bin/myPlatform/myLibFormat then add a path similar to this example:
-Djava.library.path= COSinstallation/cplex/myPlatform/myLibFormat

Similarly, on Windows, if the file cplexXX.dll is located in the folder COSinstallation\cplex\myPlatform\myLibFormat then add a path similar to this example:
-Djava.library.path=COSinstallation/cplex/myPlatform/myLibFormat

4. ...

After these steps, you can run your Java application using CPLEX as you run other applications from Eclipse.

按照这一说明,对于我的case,

Run > Run Configurations ... > Java Application > Arguments > VM arguments 中的参数应为

-Djava.library.path= /opt/ibm/ILOG/CPLEX_Studio_Academic123/cplex/bin/x86-64_sles10_4.1/

或

-Djava.library.path= {Eclipse_Home_Dir}/needed/cplex/

遗憾的是,这样的设置并不能成功运行,而是会导致类似如下的异常:

Exception in thread "main" java.lang.NoClassDefFoundError: /opt/ibm/ILOG/CPLEX_Studio_Academic123/cplex/bin/x86-64_sles10_4/1/
Caused by: java.lang.ClassNotFoundException: .opt.ibm.ILOG.CPLEX_Studio_Academic123.cplex.bin.x86-64_sles10_4.1.

我的解决方法是:

{Eclipse 菜单} Window > Preferences > Run/Debug > String Substitution > New...

建立一个新的变量
variable: cplex_library
value: {EclipseHomeDir}/needed/cplex/

(注-1:{EclipseHomeDir} 应该替换为你自己实际的Eclipse 根目录。)
(注-2:这也就是为什么在开头我们把 cplex.jar 与 libcplex123.so 拷贝到这一目录中的原因)

回到 Run > Run Configurations ... > Java Application > Arguments > VM arguments

-Djava.library.path=${cplex_library}

Apply > run, 可以看到

IBM ILOG License Manager: "IBM ILOG Optimization Suite for Academic Initiative" is accessing CPLEX 12 with option(s): "e m b q ".
Parallel mode: deterministic, using up to 2 threads for concurrent optimization.

说明成功!

Ubuntu 下安装 CPLEX 12.3 (学院版)

我的系统:Ubuntu 9.10 Karmic

首先下载如下文件
1. CPLEX for Linux 的安装文件: cplex_studio123.acad.linux-x86-64.bin
2. License 文件: access.ilm
3. 安装帮助文件: ILOGQuickStart.pdf

安装CPLEX

$ sudo chmod 775 cplexstudio123.acad.linux-x86-64.bin
$ cplex
studio123.acad.linux-x86-64.bin

跟随提示即可安装。安装后的CPLEX 在 /opt/ibm/ILOG/CPLEXStudioAcademic123 下

安装 CPLEX License 文件

按照 ILOGQuickStart.pdf 中的说明,建立 /usr/ilog/ilm (需root权限)
复制 access.ilm 至 /usr/ilog/ilm

测试:


/opt/ibm/ILOG/CPLEXStudioAcademic123/cplex/bin/x86-64sles104.1$ cplex

应出现


IBM ILOG License Manager: "IBM ILOG Optimization Suite for Academic Initiative" is accessing CPLEX 12 with option(s): "e m b q ".

IBM ILOG CPLEX Optimization Studio Academic Research Edition
Welcome to IBM(R) ILOG(R) CPLEX(R) Interactive Optimizer 12.3.0.0
with Simplex, Mixed Integer & Barrier Optimizers
5725-A06 5725-A29 5724-Y48 5724-Y49 5724-Y54 5724-Y55
Copyright IBM Corp. 1988, 2011. All Rights Reserved.

Type 'help' for a list of available commands.
Type 'help' followed by a command name for more
information on commands.

CPLEX> exit

说明安装成功。

2011年11月12日星期六

Linux From Scratch -- 定制用户自己的Linux

开始被 Linux 吸引,最本初的动机,是因为对某种阴谋论的相信:如果有一天MS把垄断了大部分的常用软件,并卖天价,且联合政府严厉的打击盗版。那时,我怎么办?(呵呵,或者你可以说杞人忧天。我也知道,非常不可能出现。因为有开源体系的存在)

Linux,号称是給予用户高度定制权的开源系统,很诱人。

于是,从 redhat,debian 到 ubuntu,发行版试过了不少,却发现,不是我最初想象的那样。
不错,软件开源免费,有桌面,有各种软件的支持。但是,最初期待的:用户的高度定制性呢?

我知道它可以定制。确切的说,我知道有人可以定制。

但我不会。

那么,那些可以的人,又是怎么走出第一步的呢?

这个问题在脑子里很久。直到今天看到了 Linux From Scratch ,才知道,我不是唯一有这样问题的。

“Linux From Scratch 文档给读者提供了设计并建构自定义的Linux系统的背景知识和过程指导。“

目标:

”构建LFS系统可以帮助理解什么使Linux运转,以及各组件之间如何相互依赖协同工作。 最好的事情之一是这个学习经历使人们获得了定制符合自己需求的Linux系统的能力。 “

地址在这里:

http://www.ha97.com/book/lfs-book-6.6/

2011年5月11日星期三

Microsoft Word 2007 启动缓慢的问题

早上到办公室,发现网络不通(WinXP)不以为意。Repair - 更新IP,嗯,网络正常了。

郁闷的事在后面...

不论是双击打开 .doc 文档,还是直接开启 word 2007,速度都甚慢 (~1,2分钟)。

尝试的方法:

1. 怀疑是程序冲突,于是结束可疑进程,关闭无关程序 (GoldenDict, OpenOffice, etc)。。。 无效。

2. 宏病毒?那么检查 office macro security setting, 删除 .docm 模板。。。 无效。

3. Google之,DDE的问题?更改关联打开方式为
D:\Program\Microsoft Office\OFFICE11\WINWORD.EXE" /n "%1" /dde 无效

4.NAV 病毒扫描?尝试
regsvr32 /u "C:\Program Files\Norton Internet Security\Norton AntiVirus\officeav.dll" 无效

5. winword.exe /a (启动 Word 并防止自动加载加载项和全局模板(包括 Normal 模板))
winword.exe /m (启动 Word 的新实例时不运行任何 AutoExec 宏)

均无效。

怎么办?怎么办?

最后一试,更改默认打印机设置从网络共享打印机为本地虚拟打印机。

好了。

总结:应该是网络问题引起的网络打印机通讯迟缓,导致word启动缓慢,希望对观众有帮助。

2011年2月28日星期一

Nikon D80 的设定(个人体会)

1. 【个人设定】菜单,默认处于:【简单】选项(仅有 10 个选择项);需要手动改成【完整】,才能看到全部 31 个选项。

2. 【Func 按钮】在机身正面上部,右手食指可触及的位置。菜单设置在“个人设定 16”;目前设为:按下则由“矩阵测光”临时转为“中央重点测光”

3. 【景深预览按钮】在机身正面下部,贴近镜头位置,右手无名指或小指 / 左手无名指 可按到的位置。按下此钮,光圈会收缩到拍摄时大小(而非取景时的全开 - 最大光圈),可以预览景深跟曝光是否适当。

4. 【AF按钮】自动对焦设置,可选AF-A,AF-S和AF-C :
  • AF-S:【单次自动对焦】用于拍摄静止物体,半按快门,相机进行一次对焦,对焦即被锁定,全部按下快门拍摄。
  • AF-C:【连续自动对焦】用于拍摄移动物体,半按快门,相机进行连续对焦(在对象移动时跟踪连续调焦),可以随时释放快门拍摄。
  • AF-A:【自动伺服自动对焦】号称相机自动判断拍摄物体的移动性,选择AF-S AF-C模式。
5. 对焦点。

虽然号称11点对焦,但除了中心对焦点外,其它都是有方向性的,左右的对焦点是竖向的,上下的对焦点是横向的。

也就是说,假如拍摄对象是纯竖线条,相机平放时只能用上下对焦点对焦,左右对焦点是无法合焦的,必须把相机竖起来才能够合焦。对于横线条拍摄对象则反之,相机平放时只能用左右对焦点对焦,上下对焦点是无法合焦的,除非把相机竖起来。

6.对焦锁定与曝光锁定:

可以使用的方式:【半按快门锁定】与【按 AE-L / AF-L 按钮锁定】,两者都可以用于 a. 锁定对焦 b. 锁定曝光 c. 锁定两者,具体可参见 Nikon D80 说明书。
目前我的设定:
  • 【AE-L / AF-L 按钮】 - “AE 保持锁定” (当按下 AE-L / AF-L 按钮时,锁定曝光,并且曝光锁定将保持到再次按下该按钮 或 曝光测光关闭(超时,目前设置为8秒);
  • 【半按快门锁定】- 半按快门时锁定对焦,直到快门被按下或释放;同时,如果之前没有用【AE-L / AF-L 按钮】锁定曝光,则在锁定对焦的同时也锁定曝光(“个人设定19”:自动曝光锁定 ON);如果在半按快门之前已经锁定了曝光(取景器里AE-L 点亮,那么半按快门仅仅对焦并锁焦,曝光仍然按照之前的锁定值进行。
这样作的好处:
  1. 避免了两个手指同时要用力(很别扭),这把情况出现在,如果把【AE-L / AF-L 按钮】设置为“仅锁定自动曝光”(而非“AE 保持锁定”),此时,如果要保持曝光锁定,则右手大拇指需要一直按住【AE-L / AF-L 按钮】不放开(否则锁定失效),然后食指去按快门。。。。
  2. 可先近距离测光(人脸 或 其他灰度 = 18 处),按一下【AE-L / AF-L 按钮】保持自动曝光(AE)锁定;回到正确位置,半按快门对焦并锁焦,移动镜头构图,全部按下快门拍摄。很从容。
  3. 如不需要近距离测光,则直接半按快门就同时实现了锁焦跟锁曝光,然后移动镜头构图,很方便。
注意:“自动曝光锁定”仅对 P,S,A模式有效,M 下曝光锁定无效;Auto 与数字可变模式下“中央重点测光”与“点测光”无效,因此不推荐使用这些模式。

7. 白平衡 - 改变色温,很重要。

应按住【WB】按钮,并旋转主指令拨盘(背面)选择正确设置;
此外,在除 【K】(选择色温)与“PRE”(白平衡预设)之外的其它设置下,可按住【WB】按钮,并旋转副指令拨盘(正面)微调白平衡,减低白平衡会让色调偏黄/红,增高则使色调偏蓝。

注意:如果在室内应用闪光灯,则最好把白平衡置为 “A”(自动),否则如果还使用“白炽灯”设置,则照片整体会非常蓝。

有图有真相:
  • 不开闪光灯,用室内白炽灯自然照明,白平衡选“自动”设置,用大光圈,慢快门,则片子效果偏柔和(泛黄),有温馨感觉,但易因抖动而模糊;

  • 不开闪光灯,用室内白炽灯自然照明,白平衡选择“白炽灯”设置,用大光圈,慢快门,则片子效果偏柔和(泛黄),有温馨感觉,但易因抖动而模糊 (比上一种情况曝光稍强,照片略明亮一些)

  • 开闪光灯,白平衡仍选“白炽灯”设置,光圈不变,快门速度会高,片子不会模糊,但由于设置不对,整体是一张蓝片子(微调白平衡也没有用);

  • 开闪光灯,白平衡选“自动”设置,光圈不变,快门速度会高,片子不会模糊,但整体效果偏冷,感觉更锐利;

Fix Ubuntu 9.10 Brightness Problem on Lenovo Y450/G550

 

Ref: http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=253303

I recently purchased a Lenovo IdeaPad Y450 Laptop, but the screen brightness was not being adjusted when I used the proper key combination (FN+UP/DOWN). The key combination did show the brightness bar, but did not adjust the actual brightness on the (LED) LCD. To fix this,

          sudo gedit /etc/default/grub

Change:

         GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

to

        GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset acpi_backlight=vendor"

Then run

        sudo update-grub

And restart!

 


 

For Lenovo G550 如上配置后,Brightness fucntion Key 不work,要如下改:

/etc/default/grub

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset acpi_backlight=vendor" 

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

即使用第三种配置即可

注意:当升级 Ubuntu 到 10.04 LTS 时,需要用第二种配置

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset acpi_backlight=vendor"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

将 Ubuntu 系统从一台电脑迁移到另一台电脑

前提:

1. 已有电脑已经装好妥为配置的 Ubuntu 系统(驱动,软件安装齐全并好使)
2. 有一新电脑装了与已有电脑相同版本的新 Ubuntu 系统(干净系统,啥也没有)。

目的:

不想重新进行配置,安装,希望能将已有电脑上配置好的 Ubuntu 系统完整迁移到新电脑上。


方法:

1. 备份已有电脑资料,命令如下:


tar    -cvpzf    /home/backup/sysbak_2010-11-22_all-but-personal-data.tgz    --exclude=/dev    --exclude=/lost+found    --exclude=/media    --exclude=/mnt    --exclude=/proc    --exclude=/sys    --exclude=/tmp    --exclude=/home/wy/Desktop    --exclude=/home/wy/Disks    --exclude=/home/wy/Downloads    --exclude=/home/wy/Dropbox    --exclude=/home/wy/Eclipse_Workspace    --exclude=/home/wy/Mine    --exclude=/home/wy/PDF    --exclude=/home/wy/Personal    --exclude=/home/wy/Photos    --exclude=/home/wy/Software    --exclude=/home/wy/.dictionary    --exclude=/home/wy/.VirtualBox    --exclude=/home/wy/.mozilla-thunderbird    --exclude=/home/backup    /      >    /home/backup/sysbak-log.txt



2. 记录新电脑上的UUID与硬盘分区等资料, 有两种方法:

  1. 运行       ls /dev/disk/by-uuid/     看到相关分区的uuid信息,将其拷贝出来 或
  2. 备份新电脑上 /etc/fstab 文件,里面应该包含了足够的信息
运行          sudo fdisk -l        找到相关分区的sda*信息,也拷贝出来,然后和上面一样做,不过 就是 uuid 信息换 成了sda*


3. 将备份好的包拷贝到新电脑上,展开:(可在桌面环境下进行)
 
tar -xvpzf  /home/backup/sysbak_2010-11-22_all-but-personal-data    -C    /



4. 此刻新电脑无法正常启动,需修正 (从liveCD或USB或whatever什么玩意启动)

原因在于UUID不匹配,因此:

替换覆盖好的 /etc/fstab 中的内容为包含正确 UUID (新电脑)的值,如有其它想要自动加载的内容,也应一并修改成功

替换覆盖好的 /boot/grub/grub.cfg (menu.lst) 中的内容为正确的 UUID 以及 分区符号

以及可能的sd*错误 (按以上做法应该没有)

(完)




附录一:

备份还原系统命令详细说明

备份系统:


tar    -cvpzf    /home/backup/sysbak_2010-11-22_all-but-personal-data.tgz    --exclude=/dev    --exclude=/lost+found    --exclude=/media    --exclude=/mnt    --exclude=/proc    --exclude=/sys    --exclude=/tmp    --exclude=/home/wy/Desktop    --exclude=/home/wy/Disks    --exclude=/home/wy/Downloads    --exclude=/home/wy/Dropbox    --exclude=/home/wy/Eclipse_Workspace    --exclude=/home/wy/Mine    --exclude=/home/wy/PDF    --exclude=/home/wy/Personal    --exclude=/home/wy/Photos    --exclude=/home/wy/Software    --exclude=/home/wy/.dictionary    --exclude=/home/wy/.VirtualBox    --exclude=/home/wy/.mozilla-thunderbird    --exclude=/home/backup    /      >    /home/backup/sysbak-log.txt


'tar' 是用来备份的程序
  • c - 新建一个备份文档
  • v - 详细模式, tar程序将在屏幕上实时输出所有信息。
  • p - 保存许可,并应用到所有文件。
  • z - 采用‘gzip’压缩备份文件,以减小备份文件体积。
  • f <filename> - 说明备份文件存放的路径, /backup.tgz 是本例子中备份文件名。
  • 来 看看我们想要包含的目录。我们不想备份所有的东西,因为有些目录是没有多大用处的。 确认你不想包含的文件,否则您会得到一个很奇怪的结果。 您也不必备份 /mnt 目录下的东西,除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media 目录下(比如,任何CD或者移动存储介质).否则,剔除/media。
  • 最後一个参数是我们想要保存的目录. 我们想要保存所有的东西,使用 / 作为根目录。


从备份中还原系统:

    tar -xvpzf  /media/Data/ubuntu.tgz -C /


参数x是告诉tar程序解压缩备份文件。 -C <directory> 参数是指定tar程序解压缩到的目录。 ( 在本例中是/ )

这会花一段时间。等它完成了,你就有了一个完全恢复的Ubuntu系统! 只需确保在你做其他任何事情之前,重新创建你剔除的目录: ( /proc, /lost+found, /mnt, /sys, 等等。)

    mkdir /proc /lost+found /mnt /sys


大功告成!!



附录二:

拷贝完系统后,可能需要让新硬盘能够启动,可参考以下 Grub 2 教程:

Ref: http://www.dedoimedo.com/computers/grub-2.html

Reinstall GRUB

GRUB 2 can be installed even while you are booted in the OS. You do not need a live environment for that. Just execute the install-grub command against the device or the partition you desire.

grub-install <target>

<target> can be /dev/hda, /dev/sdb, /dev/sdc4, and so forth.

It is important that you pay attention to the output produced by the command. If you have external disks connected at the time you run the command, it will add these disks to the list of mapped devices. There should be no big harm in that, but if some entries are incorrect, remove them.



附录三:


可在一个全空的硬盘上直接复制 Ubuntu 操作系统,见下面所附的文章:

-------------------------------------------------------------------------------------------------


(注,未验证)linux 硬盘迁移以及分区对考,用 cp -a 命令即可,cp-a 命令拷贝完后不用改权限,因为原有权限全部保留,只需处理下引导,同时 fstab 中的 uuid 改为新分区的  uuid即可,或者不用 uuid 参数进行挂载也 行。新的 swap 直接写在 fstab 中即可实现开机自动挂载。

-------------------------------------------------------------------------------------------------

Ref:http://forum.ubuntu.org.cn/viewtopic.php?f=86&t=62836&start=0


今天某人想试试Linux,于是偶鼓动帮着装一个,于是乎拿来了移动硬盘接到偶本本上。偶很BH,所以立马格式化出一块ext3分区,将tar拷贝所有内容过去;。。。。。

吃 了晚饭回来后,发现拷贝完成了。就检查fdisk -l 和/dev/disk/by-uuid,将分区相关信息改写到fstab和menu.lst上,终于来到最后一步,也就是将grub写到移动硬盘引导 mbr处。接到设好usb启动的机器上一试,perfect!!!

建议:要推广linux的朋友可以可以先在移动硬盘上装好系统,然后完全free地拷贝系统。 GNU就是copyleft的,不是么?

简单的攻略:
===================================
首先声明,我是在ubuntu 7.04下面装的,其他系统安装方式一样,和这里的唯一不同之处就是ubuntu使用uuid来标记分区,而其他版本一般都用/dev/sda*来标明分区。

好,现在开始按部就班走下面几个步骤:

1.目标分区

假设这里的目标分区为sda5,可以用fdisk -l查看是哪个数字
执行格式化mkfs.ext3 /dev/sda5;
新建目录mkdir /media/disk;
将其mount到目录下 mount /dev/sda5 /media/disk

2.复制文件

方法有很多种

我是采用逐个打包然后解压的方式,要求有空间放得下压缩包,
比如/bin目录 tar zcvf /back_bin.tgz /bin

对除了/dev /proc /sys /tmp /media目录外的其他目录都这么打包

然后 cd /media/disk
建立几个目录和文件 mkdir dev; mkdir proc; mkdir sys; mkdir tmp; mkdir meida;

cp /vmlinuz .; cp /initrd.img .;

解压那几个包到这个目录下面,也以/bin目录为例 tar zxvf /back_bin.tgz 然后将相关的压缩包删除

3.修改启动和过载选项(关键一步)

uuid情况:

ls /dev/disk/by-uuid/ 看到相关分区的uuid信息,将其拷贝出来
vi /media/disk/etc/fstab 用刚才的uuid代替根目录那行的uuid
vi /media/disk/boot/grub/menu.lst 也用uuid代替kernel行的root=后面的uuid,同时修改root行(hdx,y)信息,

*如果你是用第一块硬盘的sda5分区就要用(hd0,4),就是数字减去一来获得

非uuid情况:
sudo fdisk -l
找到相关分区的sda*信息,也拷贝出来,然后和上面一样做,不过就是uuid信息换 成了sda*

4.更新grub
因为新硬盘没法自己启动到linux上,要写入grub到相关分区上去
sudo grub; root (hdx,y); setup (hdx); quit

*如果新机器是不同的显卡配置,那么最好改写/etc/X11/xorg.conf为合适的显卡代码vesa, ati, nv, intel等.不然进不去图形界面。仔细看清楚每一步,大胆去试试,应该能成功!

-------------------------------------------------------------------------------------------------

Ref:http://xieshaohu.wordpress.com/2010/04/26/%E8%BF%81%E7%A7%BBubuntu%E7%B3%BB%E7%BB%9F%E5%88%B0%E6%96%B0%E7%A1%AC%E7%9B%98/

笔记本硬盘是120G的,用了这么长的时间,积累了一些数据,硬盘空间有点不够用了。所以买了一块西数500G的硬盘,准备更换笔记本的硬盘。

操作系统版本:Ubuntu 9.10
文件系统类型:Ext4
Grub版本:Grub2

事前查了一些资料。大概的思路如下

  1. 用硬盘盒挂载新的硬盘,然后用gparted分区,创建好文件系统。
  2. 用live cd启动电脑,挂载新旧硬盘。
  3. 迁移数据。tar/dd/cp -a
  4. 安装grub,并修改grub配置文件中的uuid。
  5. 修改/etc/fstab中的uuid

思路清晰了就开始动手吧。

  1. 挂载新的硬盘,以及格式化都很顺利。
    提示:在创建分区表的时候使用默认的msdos格式就可以了。
  2. live cd启动电脑,使用fdisk –l查看硬盘的分区情况。(一下所有操作均已root身份执行,所以请先执行sudo -s获得一个带有root权限的shell环境,避免频繁敲入sudo)
    比如我的电脑分了四个区,其中三个是数据分区(/ /boot /home),一个是交换分区。
    数据分区对应关系是/ 对应/dev/sda6;/boot 对应/dev/sda1;/home对应/dev/sda7,新硬盘分区相同,不过显示为/dev/sdbX
  3. 在/mnt目录下分别创建对应硬盘分区的文件夹。
    $ sudo –s
    $ cd /mnt
    $ mkdir oldboot newboot oldroot newroot oldhome newhome
  4. 挂载相关的分区到/mnt目录下
    $ mount /dev/sda1 /mnt/oldboot
    $ mount /dev/sdb1 /mnt/newboot
    其他的分区使用类似的命令挂载
  5. 挂载完了之后就可以开始动手转移文件了。在Linux系统迁移的时候,要注意保持文件的所有者和权限不变,所以也查了不少资料,网上有说用tar的,也有说用dd的,当然还有说用cp –a 的,这三者都用过,绕了不少弯路,现在把一些心得写下来。
    tar——使用这个命令的时候需要注意的就是需要首先进入相应的目录,然后再执行,参数部分要包含-p,最终执行成功就是使用了这个命令。具体命令如下:
    $ cd /mnt/oldboot
    $ tar cpf – . | (cd /mnt/newboot; tar xpf –)

    不需要-v参数减少不必要的输出,另外在这个在迁移socket类型的文件时出错,不过在我的电脑上只出现在/tmp文件夹以及/home目录下adobe的设置文件中,而adobe我已不用,所以问题忽略。
    dd—— 在用这个进行COPY的时候,参考了一些网上的资料,命令为dd if=/dev/sda1 of=/dev/sdb1 conv=noerror,sync。复制完了之后,文件权限都对了。但是磁盘空间的容量不对了,变成了和老的硬盘一样大小的容量,不知道是不是conv 参数的文件,看man文档,sync是填充数据,不足的部分使用空白替代。或许是这个问题,现在也不调查了。
    cp -a——COPY完了之后的文件权限不正确,放弃。
  6. 文件全部转移完了之后,确认文件数量是否一样,然后umount全部分区,并删除/mnt下创建的目录,关机,把新的硬盘安装到笔记本。
  7. 然后用live cd开机,挂载全部分区到/mnt,准备修复grub。挂载的时候需要注意,比如我有三个分区,需要首先挂载/分区,然后分别挂载/home和/boot。
    $ mount /dev/sda6 /mnt/
    $ mount /dev/sda7 /mnt/home
    $ mount /dev/sda1 /mnt/boot
  8. 然后挂载本机的一些设备。
    $ mount –bind /dev/ /mnt/dev
  9. 都挂载完了之后使用chroot命令进入我们自己的系统
    $ chroot /mnt
  10. 开始重新安装grub2。我的是直接安装到硬盘MBR中。
    $ grub-install /dev/sda
  11. 如果上面的安装没有提示error,使用下面的命令再次验证安装。
    $ grub-install –recheck /dev/sda
  12. 安装完成了之后,执行以下update-grub命令更新grub.cfg文件中的UUID。
    $ update-grub
  13. grub.cfg可以通过update-grub命令直接修改成功,/etc/fstab文件就没有那么幸运了,只能手动修改。先获取新硬盘UUID
    $ blkid > uuid
  14. 现在可以通过vim把刚刚获得的UUID一一设置到/etc/fstab文件中。
  15. 修改完了之后,退出chroot。按下键盘Ctrl + D。
  16. 卸载硬盘硬盘分区:
    $ sudo umount /mnt/home
    $ sudo umount /mnt/boot
    $ sudo umount /mnt/
  17. sudo reboot

至此,Ubuntu系统成功迁移到新的硬盘。