运维题目: 一个 2t 硬盘,只有 400g 数据,将其 dd 对拷到 512G 硬盘是否可行? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wesall100200
V2EX    Linux

运维题目: 一个 2t 硬盘,只有 400g 数据,将其 dd 对拷到 512G 硬盘是否可行?

  •  2
     
  •   wesall100200 2019-05-18 21:05:05 +08:00 via iPhone 8351 次点击
    这是一个创建于 2339 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天刷认证书看到这道题,实在想不出是否可行,求各位大佬指点一下,谢谢!
    26 条回复    2019-05-23 16:41:28 +08:00
    cubelee
        1
    cubelee  
       2019-05-18 21:16:23 +08:00 via Android   1
    那就写不行
    unifier
        2
    unifier  
       2019-05-18 21:18:24 +08:00 via iPhone   1
    盲猜不行

    毕竟你对拷的时候不能单挑出有数据的块来进行拷贝
    mayx
        3
    mayx  
       2019-05-18 21:19:39 +08:00 via Android   1
    那就只拷 512G 的数据呗,剩下的应该也是空字节,忽略就行了
    wweir
        4
    wweir  
       2019-05-18 21:21:21 +08:00 via Android   1
    索引对不上号,没用了
    loading
        5
    loading  
       2019-05-18 21:41:17 +08:00 via Android   1
    可以用 8G 和 4G 的 U 盘做这个实验。
    mrco
        6
    mrco  
       2019-05-18 21:44:02 +08:00   2
    缩小源硬盘的文件系统( xfs 的话就不用往后面看了),比如缩小为 500G,然后重新分区,然后 dd 克隆,最后再将目标盘重新分区,扩大至 512G
    loading
        7
    loading  
       2019-05-18 21:44:17 +08:00 via Android   1
    我认为不不行的,因为硬盘上的 400G 不是像水一样都放在桶底的,磁盘碎片。
    所以限制在 512G 里面可能并没有包含所有真实。
    是不是还需要做个实验。
    n121
        8
    n121  
       2019-05-18 21:50:45 +08:00   4
    感觉不行,还是动手试了一下。

    # dd if=/dev/zero of=32MB bs=1K count=32K
    32768+0 records in
    32768+0 records out
    33554432 bytes (34 MB, 32 MiB) copied, 0.105461 s, 318 MB/s

    # mkfs.ext4 32MB

    # dd if=32MB of=16M bs=1K count=16K
    16384+0 records in
    16384+0 records out
    16777216 bytes (17 MB, 16 MiB) copied, 0.0500567 s, 335 MB/s

    # mkdir mnt; mount 16M mnt
    mount: /root/tmp/mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.


    我还复制了一个文件进去测试,就不贴了

    为了回复这个问题,验证了下手机号-。-
    fhsan
        9
    fhsan  
       2019-05-18 21:53:09 +08:00   1
    感觉不行,和分区表 GPT、MBR 有关系吗?
    omph
        10
    omph  
       2019-05-18 21:57:10 +08:00   1
    基于文件系统的拷贝是可以的,dd 应该不行
    watzds
        11
    watzds  
       2019-05-18 22:00:48 +08:00 via Android   1
    分区 dd 到另一块硬盘,迁移 ubuntu 试过可以,也许 dd 复制也比较智能,试试呗
    monimonipo
        13
    monimonipo  
       2019-05-18 22:03:31 +08:00   1
    绝大部分情况是不行的,极端情况可以
    kaneg
        14
    kaneg  
       2019-05-18 22:09:36 +08:00 via iPhone   3
    除非那 400g 数据都集中排列在前 500g 内
    aquariumm
        15
    aquariumm  
       2019-05-18 22:13:03 +08:00 via Android   1
    不可能,先不说超级块对不上,ext4 文件填充是均匀分布的,所以肯定这 400g 数据分布在 2t 的空间中,只 dd 签 512g 只能 d 出来一小部分文件
    cabbage
        16
    cabbage  
       2019-05-18 23:38:26 +08:00 via Android   7
    用 bsdtar/tar 把所有文件打个包比较合适(可以顺便压缩下降低传输时间),用 dd 按区块拷贝不靠谱,因为数据在硬盘上不一定连续。但是非要用 dd 的话,的确可以如 @mrco 所说先把 2TB 硬盘的文件系统缩小到 512GB 以下,dd 克隆到 512GB 的硬盘上以后,再把文件系统扩大占满 512GB。

    另外开放下思维的话用 rsync 这种同步备份工具也是相当合适

    参考: https://wiki.archlinux.org/index.php/Full_system_backup_with_tar


    题外话,单纯 1:1 拷硬盘用 cat 其实比用 dd 更合适,速度也快太多。

    比如下边这样拷贝出一份 sda1 的全盘镜像还顺便压缩下:
    `cat /dev/sda1 | gzip -c > /media/USBDrive/sda1.iso.gz`

    然后克隆到另一台机器的硬盘上:
    `gzip -dc /media/USBDrive/sda1.iso.gz | cat - > /dev/sdb1`

    就我所知 cat 会自适应使用读写最快的 block 大小,dd 读写往往会很慢,原因是默认的 block size 太小还不能自适应,往往需要手工试验单独指定
    ryd994
        17
    ryd994  
       2019-05-19 02:08:48 +08:00 via Android   4
    @cabbage 以前不推荐用 cat 的原因就是你不知道用的什么 block size,也不知道有没有额外的 padding。额外的 padding 可能影响后面的数据。dd 的 block size 就很确定。

    你这样压缩其实压缩不了多少,因为空闲空间不填零,可压缩性很差。要压缩的话先用 zerofree 填充空闲空间。没有 zerofree 的话手动创建一个大文件写满零再删除也行。

    然后压缩不建议 gzip,除非是走公网。gzip 压缩率高但 CPU 密集。建议 lzo 随便压一下其实已经够了。特别是经过写零预处理的话。

    另外你的命令里 cat 是多余的
    gzip -c </dev/sda >/media/USBDrive/sda1.ing.gz
    gzip -dc <xx.img.gz >/dev/sda

    tar 能加速拷贝是因为 cp 每个文件会 sync 一次,对小文件就很蛋疼。两个 tar 之间用 pipe 连接,pipe 有 buffer 的,而且两个进程各自不 block

    tar -c ./ | tar -C /dst/ -xv 不需要压缩。因为内存带宽足够。压缩反而慢。
    ccav
        18
    ccav  
       2019-05-19 05:25:05 +08:00   1
    在 2t 的盘里建一个 512G 的镜像. COPY 至镜像.

    再 2 个同大小之间处理 .

    2T 的盘只用了 400G,还余大把空间么.

    不熟悉运维业务,不知道这样子可不可行?
    OscarUsingChen
        19
    OscarUsingChen  
       2019-05-19 05:48:06 +08:00 via iPhone   1
    不行的,至少要先 resize 一下
    shiyouming91
        20
    shiyouming91  
       2019-05-19 06:38:16 +08:00 via iPhone   1
    gparted 缩小一下分区(也有一些命令功效一样比如 resize2fs ),目标盘建立一个一样大的分区 dd 过去。如果需要的话再把分区扩大。
    dszhblx
        21
    dszhblx  
       2019-05-19 07:30:27 +08:00 via Android   1
    没说 2t 硬盘有几个分区啊,如果这 400g 数据都在一个分区内就可以
    sparkssssssss
        22
    sparkssssssss  
       2019-05-19 14:10:38 +08:00 via iPhone
    马克
    szq8014
        23
    szq8014  
       2019-05-19 19:25:20 +08:00   1
    笔记本换硬盘的时候试过通过 dd 把一个 500G 的 HDD 硬盘数据写到 200G 的 SSD 上,前提是把 500G 先压缩分区到 200G 以内,开机启动没有任何问题,然后再磁盘管理把分区调整一下下就可以了
    defunct9
        24
    defunct9  
       2019-05-19 20:58:24 +08:00 via iPhone   1
    可以,最近这么干过
    51Tao
        25
    51Tao  
       2019-05-20 12:54:30 +08:00
    对磁盘 dd 不行的话,还可以对文件 dd
    pmispig
        26
    pmispig  
       2019-05-23 16:41:28 +08:00
    大意上是不行的,但是如果变通一下,数据肯定是放在分区里的,可以缩小分区,然后对分区进行 DD
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2399 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 15:38 PVG 23:38 LAX 08:38 JFK 11:38
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86