fstransform开源工具支持Linux下无损转换文件系统
简介
当我们想要改变Linux操作系统下已有分区的文件系统类型时,除了备份数据、重新格式化、恢复数据外,似乎别无它法。但fstransform的出现则给了我们一个选择。fstransform 允许操作系统在线、无损地将一种文件系统类型转换成另一种,比如从 jfs 变为 ext4。
截止本文发布时,fstransform最新版本是2012.03.28发布的0.9.3版本,该版本已经支持这些文件系统类型:ext2、ext3、ext4、reiserfs、minix、jfs、xfs
安装使用
git地址:https://github.com/cosmos72/fstransform
下载fstransform命令,解压包,解压出目录为:fstransform-master进行编译安装
wget https://github.com/cosmos72/fstransform/archive/master.zip
unzip master.zip
./configure && make && make install
fstransform 命令的语法非常简单:fstransform <源设备> <目标文件系统>。请记住,它需要 root 权限才能运行,所以如果是普通用户不要忘记在开头添加 sudo。这是一个例子:
sudo fstransform /dev/sdb1 ext4
请注意,无法转换根文件系统,这是一种安全措施,请改用测试分区或实验性 USB 盘。
与此同时,Fstransform 会在控制台中有许多辅助输出。最有用的部分是预计完成时间,让你随时了解该过程需要多长时间。
使用限制
Fstransform 存在一些警告和限制,因此强烈建议在尝试转换之前进行备份。此外,使用 Fstransform 时需要注意一些限制:
- 你的 Linux 内核必须支持源文件系统和目标文件系统。听起来很明显,如果你想使用 ext2、ext3、ext4、reiserfs、jfs 和 xfs 分区,这样不会出现风险。Fedora 支持所有分区,所以没问题。
- 将 ext2 升级到 ext3 或 ext4 不需要 Fstransform。请使用 Tune2fs。
- 源文件系统的设备必须至少有 5% 的可用空间。
- 你需要在开始之前卸载源文件系统。
- 源文件系统存储的数据越多,转换的时间就越长。实际速度取决于你的设备,但预计它大约为每分钟 1GB。大量的硬链接也会降低转换速度。
- 虽然 Fstransform 被证明是稳定的,但请备份源文件系统上的数据。
fstransform要有成功,有五个要求:
1.设备必须是卸载的,即“umount device”必须工作。特别是,如果某些正在运行的程序正在使用该设备,你必须先关闭或杀死他们。转换当前根目录不起作用。为此,你应该从其他安装(例如live CD、DVD或USB)启动。
2.设备必须有一点空闲空间,通常至少5%
警告:将几乎已满的设备转换为“xfs”文件系统这可能很棘手:
*你需要更多的自由空间,通常至少10%,
*或者你必须非常快地完成转换
当源或目标(或两者)文件系统几乎满时并在源设备或目标设备(或两者)上运行“xfs_fsr”
在恢复转换之前。未来的fstransform版本可能会自动执行此操作。
3.设备上的文件系统必须支持稀疏文件,即带有孔的文件
(例如,参见http://en.wikipedia.org/wiki/Sparse_file来解释它们是什么)
两个系统调用中至少有一个调用“ioctl(FS_IOC_FIEMAP)”或“ioctl(FIBMAP)”
(请参阅最近Linux内核中的文件Documentation/filesystems/fiemap.txt。)
获取解释,或在Internet上搜索同一文件)
ioctl(FIBMAP)受设计限制为2G-1块,通常转换为8TB-4kB。
要转换等于或大于8TB的文件系统,需要ioctl(FIEMAP)。
4.Linux内核必须支持初始和最终文件系统(即,它必须能够安装它们)通过工具“mkfs”和“fsck”(即,必须能够创建它们并检查它们是否存在错误)。理论上,通过FUSE(用户空间)驱动程序提供支持是可以接受的,但目前还没有经过测试的FUSE文件系统可以转换可靠的fstransform。
5.必须提供以下程序:
三个定制程序“fsmove”、“fsmount_内核”、“fsremap”(随脚本一起分发)和几个常见的Linux工具:其中expr,id,blockdev,losetup,mount,umount,mkdir,rmdir,rm,mkfifo,dd,sync,fsck,mkfs
原理
1、将待转换文件系统的设备/分区以读写方式挂载。
mount {device} {device-mount-point} [your-options]
2、在设备/分区内部(待转换文件系统剩余空间(不少于5%))创建一个稀疏文件,映射成loop设备
dd if=/dev/zero of={device-mount-point}/{loop-file} bs=1 count=1 seek=$(( {device-size-in-bytes} - 1 ))
或者,如果有truncate
truncate -s {device-size-in-bytes} {device-mount-point}/{loop-file}
3、 使用新文件系统格式化循环设备loop-file
mkfs.[ext2,ext3,ext4,reiserfs,xfs,jfs...] {device-mount-point}/{loop-file}
如果创建ext2/ext3/ext4文件系统,选项“-m 0”将帮助您更精确地检测循环文件中的文件系统是否/何时变满
4、以读写方式挂载loop设备
mount {device-mount-point}/{loop-file} {loop-file-mount-point} -o loop {your-options}
这将找到一个空闲的/dev/loop{n},设置并挂载它。
5、从{device mount point}到{loop-file mount point},手动和递归地移动所有文件、目录、链接等。在{loop-file mount point}内复制{device mount point}中的原始树。有用到fsmove等工具。
6、初始设置几乎完成
现在,在{device mount point}中创建一个满0(不是稀疏)的文件
要帮助fsremap定位{device}内的任何可用磁盘空间,请执行以下操作:
dd if=/dev/zero of={device mount point}/{zero file}bs=512
第二个命令将退出,错误为“设备上没有剩余空间”,
但这是意料之中的,不是问题。
注意:如果您有fallocate并且{device}上的文件系统支持它,
你可以用fallocate代替dd,因为它速度更快。
7、以只读方式重新安装{device}以确保没有进程将在其中写入:
mount {device} -o remount,ro
8、选择一个有一些可用空间(不在{device}内)的文件夹,在那里fsremap可以编写备份数据和日志文件,并将其命名为{storage dir}。
如果跳过此步骤,fsremap将使用您的主目录作为默认值{storage dir}。
9、开启工具fsremap,运行:
{fsremap} -t {storage-dir} {device} {device-mount-point}/{loop-file} {device-mount-point}/{zero-file}
10、在分析阶段之后,fsremap将对{device}进行卸载:
umount {device}
11、fsremap现在将块从{loop-file}重新定位到{device},并将报告进展情况。
完成后,检查重新映射是否有效:
fsck -f {device}
mount {device} {device-mount-point} [your-options]
如果一切正常,则将删除{storage dir}
fstransform开源工具支持Linux下无损转换文件系统相关推荐
- linux磁盘文件格式转换,使用Fstransform在Linux下无损转换文件系统格式
在 Linux 下也可以无损地转换文件系统格式,那就是使用 Fstransform 工具,它可以将 ext2.ext3.ext4.jfs.reiserfs 及 xfs 分区转换成另一种类型,而且无须备 ...
- 【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发
原文:Visual Studio 2015 for Linux更好地支持Linux下的开发 英文原文:Targeting Linux Made Easier in Visual Studio 2015 ...
- c语言linux下可用函数,[原创]linux下编码转换问题,C语言实现,使用iconv函数族68...
[原创]linux下编码转换问题,C语言实现,使用iconv函数族68 (2012-07-30 02:49:00) 标签: linux 68 c语言 杂谈 #include #include #inc ...
- 流行的任天堂电子游戏模拟器 Cemu 计划开源并支持 Linux
流行的任天堂电子游戏模拟器 Cemu 计划开源并支持 Linux 这的确是个好消息! 如果你喜欢玩复古游戏,你可能已经接触过复古游戏机模拟器.顺便说一句,所谓"模拟器Emulator&quo ...
- 关于linux下的嵌入式文件系统以及flash文件系统选择(转)
嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件 ...
- linux下几种文件系统的测试比较
在linux下对部分文件系统进行测试 一. 我的实验平台 我使用的是vmware workstation7.1.4.16648 虚拟机 安装的操作系统信息 [root@node2 ~]# uname ...
- linux文件系统选哪种,linux下几种文件系统的测试比较
在linux下对部分文件系统进行测试 一. 我的实验平台 我使用的是vmware workstation7.1.4.16648虚拟机 安装的操作系统信息 [root@node2 ~]# uname - ...
- 关于linux下的嵌入式文件系统以及flash文件系统选择
嵌入式linux下常见的文件系统 • RomFS:只读文件系统,可以放在ROM空间,也 可以在系统的RAM中,嵌入式linux中常用来作 根文件系统 • RamFS:利用VFS自身结构而形成的内存文件 ...
- linux 下制作fat32文件系统的命令
linux 下制作fat32文件系统的命令: mkfs.vfat -F 32 /dev/sda -需要做文件系统的硬盘分区
最新文章
- 队列在多线程中的应用
- “硅谷之父”传奇:拯救斯坦福大学、培养大批高科技人才、指导创立惠普
- 设计模式 策略模式
- 【centos6.5 安装 node.js + npm】
- java获取用户地理位置_java web 通过ip获取当前地理位置
- Java探索之旅(6)——对象和类
- 锻炼产品架构思维的4个维度
- 如何判断 cxgrid 双击了哪一列_学会根据三视图判断组成几何体的个数,助你中考数学满分...
- (Oracle)rownum用法详解 转载的
- golang 格式“占位符”%d,%f,%s等应用类型
- 初学java,有哪些值得推荐的 Java 练手项目?
- 零基础怎么自学日语?
- vs2008 sp1 C++ 发布程序 .
- 【JS】match() 方法
- 山东轻工业学院CSDN高校俱乐部参加“新一代语音云发布暨语音开发者大会”与“2012百度开发者大会”体会心得
- 18个好用APP,你手机里有哪些堪称神器的APP
- 教育网看高清世界杯方法
- 用JS实现万年历效果,精!
- Qos(Quality of Service)
- allegro如何快速的按照模板放置器件