Linux下生成spase文件

dd if=/dev/zero of=fs.img bs=1K seek=10240 count=0

  1. GlusterFS introduction
    GlusterFS is the core for Scale-out storage solution of Redhat. It
    is an open source, clustered file system capable of scaling to
    several petabytes and handling thousands of clients. GlusterFS
    aggregates various storage servers over Ethernet or Infiniband RDMA
    interconnect into one large parallel network file system. It
    aggregate disk and memory resources and manage data in a single
    global namespace. GlusterFS is based on a stackable user space
    design, delivering exceptional performance for diverse workloads.

  2. Installation of GlusterFS in RHEL6.5 on system z
    There are a lot of documents about installation on Redhat or Fedora
    for x86 architecture, but seledom can find some guides for zLinux.
    So I wrote this simple installation guide to tell the user how to
    install it on zlinux.

Ubuntu 12.04 64 bit安装glusterfs 3.3.0配置replica

文件显示大小和实际大小以及文件的洞的问题

[root@linux_c ~]# ll fs.img
-rw-r–r– 1 root root 10485760 Oct 13 14:44 fs.img
[root@linux_c ~]# du fs.img
0 fs.img

Enviroment prepared
Operating environment: Redhat 6.5 on system z , two nodes, one client
Node 1:
Name:ora1 IP Addr: 172.16.27.142
Node 2:
Name:ora2 IP Addr:172.16.27.143
Client:
IP Addr:172.16.31.81

 

 

备份到networker上显示
root@linux_a nsr]# mminfo -r “nsavetime,name,volume,client,sumsize”
-N /root/fs.img
save time name volume client size
1223880063 /root/fs.img test.a linux_c.shecs.com 4 KB

Be sure your /etc/hosts is the same between node1, node2 and client.

需要使用两台服务器作gluster replication
server端,同时把server端当client端

目录

恢复后显示
[root@linux_c ~]# ll fs.img*
-rw-r–r– 1 root root 10485760 Oct 13 14:47 fs.img
-rw-r–r– 1 root root 10485760 Oct 13 14:44 fs.img.R
[root@linux_c ~]# du fs.img*
0 fs.img
12 fs.img.R 

1>. Install GlusterFS from source code for each node.
Download the latest Gluster source from
http://www.gluster.org/download

server1  10.10.10.10

1 前言  www.2cto.com  

图片 1

2>.Extract the source code using the following command:
tar -xvf glusterfs-3.5.2.tar.gz

server2  10.10.10.11

2 本文将要说明的问题

GlusterFS needs Flex, python, bison and openssl. Before buiding the
software, need to install these repository. You can find these in OS
installation DVD.(flex-2.5.4a-13.s390x.rpm,
glibc-kernheaders-2.4-9.1.87.src.rpm ,
openssl-devel-1.0.1e-15.el6.s390x.rpm,bison-2.6.5 )
use: rpm -ivh ****.rpm to install.

 

3 做以下游戏来观察这个问题

3>. Run the configuration utility using the following command.

进入server1 root下

3.1 我们建立5个不同内容的文件

GlusterFS configure summary

FUSE client : yes
Infiniband verbs : no
epoll IO multiplex : yes
argp-standalone : no
fusermount : yes
readline : no
georeplication : yes
Linux-AIO : yes
Enable Debug : no
systemtap : no
Block Device xlator : no
glupy : no
Use syslog : yes
XML output : no
QEMU Block formats : no
Encryption xlator : no

The configuration summary shows the components that will be built with
GlusterFS.

4>. Build the GlusterFS software using the following commands

make
make install

5>. Verify that the correct version of GlusterFS is installed, using
the following command:
/usr/local/sbin/glusterfs -V
glusterfs 3.5.2 built on Oct 22 2014 03:17:25
Repository revision:
git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc.
http://www.redhat.com/
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

Also install GlusterFS on client.

  1. Testing
    A. start GlusterFS service
    [root@ora1 ~]# /etc/init.d/glusterd start

B. Adding servers to trust storage pool
[root@ora1 glusterfs]# /usr/local/sbin/gluster
gluster> peer probe ora2
peer probe: success.

Verify the peer status from the first server using the following
commands:
gluster> peer status
Number of Peers: 1
Hostname: ora2
Uuid: 87484e4c-8647-4bdc-b716-5878ff7f90d4
State: Peer in Cluster (Connected)

c. Setting up GlusterFS Server Volumes
on both node1 and node2,
mkdir /dir1,

Then Create a replicated volume:
gluster> volume create dir1 replica 2 ora1:/dir1 ora2:/dir1 force
volume create: dir1: success: please start the volume to access data

gluster> volume start dir1
volume start: dir1: success

(Optional) You can display the volume information:
gluster> volume info
Volume Name: dir1
Type: Replicate
Volume ID: e0a9cb48-e5ed-4ded-8450-6708f36eeb94
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: ora1:/dir1
Brick2: ora2:/dir1

D. Setting up GlusterFS client
Manually mount a Gluster volume,we will mount the dir1 on server to
local directory mnt/glusterfs:
[root@rhel65 glusterfs-3.5.2]# mkdir /mnt/glusterfs
[root@rhel65 glusterfs-3.5.2]# mount -t glusterfs ora1:/dir1
/mnt/glusterfs

Verify the mounting results:
[root@rhel65 glusterfs-3.5.2]# mount -t fuse.glusterfs
if it shows the below messages, it means mounting sucessful:
ora1:/dir1 on /mnt/glusterfs type fuse.glusterfs
(rw,default_permissions,allow_other,max_read=131072)

[root@rhel65 glusterfs-3.5.2]# cd /mnt/glusterfs/
[root@rhel65 glusterfs]# touch file1 file2 file3
[root@rhel65 glusterfs]# ls -l
total 0
-rw-r–r– 1 root root 0 Oct 22 03:34 file1
-rw-r–r– 1 root root 0 Oct 22 03:34 file2
-rw-r–r– 1 root root 0 Oct 22 03:34 file3

Because when we create the dir1, we use replicated type, Replicated
volumes create copies of files across multiple bricks in the volume.
Verify node1 and node2:
Node1:
[root@ora1 dir1]# ls -l
total 0
-rw-r–r–. 2 root root 0 Oct 22 2014 file1
-rw-r–r–. 2 root root 0 Oct 22 2014 file2
-rw-r–r–. 2 root root 0 Oct 22 2014 file3

Node2:
[root@ora2 ~]# cd /dir1
[root@ora2 dir1]# ls -l
total 0
-rw-r–r–. 2 root root 0 Oct 22 2014 file1
-rw-r–r–. 2 root root 0 Oct 22 2014 file2
-rw-r–r–. 2 root root 0 Oct 22 2014 file3

sudo -s 

3.2 ll查看这5个文件

  www.2cto.com  

3.3 du 查看这5个文件

分别在两台服务器上添加

4 ext3_inode的磁盘存储格式

vim /etc/hosts

4.1 查出i_size和i_blocks在磁盘上到底存储的值为多少

10.10.10.10  server1

4.1.1 找出这5个文件的inode编号

10.10.10.11  server2

4.1.2 找出这5个inode在磁盘上的存储位置和内容

 

4.2 根据i_size,i_blocks在ext3_inode中的偏移量查看其具体数据

cat /etc/hosts 

5 带洞的文件如何存储

127.0.0.1   localhost

5.1 先科普一下文件的洞

10.10.10.10  server1

5.2 我们来看一下具体的磁盘上文件的洞如何存储

10.10.10.11  server2

5.3 ls -a命令查看

 

5.4 du -h hole命令查看

# The following lines are desirable for IPv6 capable hosts

5.5 dump磁盘上面的16进制数据来看

::1     localhost ip6-localhost ip6-loopback

6 总结

fe00::0 ip6-localnet

前言  www.2cto.com  

ff00::0 ip6-mcastprefix

:我们经常用ls命令,du命令,可是看到的结果不同,他们之间有什么关系呢?:如

ff02::1 ip6-allnodes

 [[email protected]
filetest]# du -h *

ff02::2 ip6-allrouters

 0       file_0

ff02::3 ip6-allhosts

 4.0K    file_1

 

 4.0K    file_2

安装配置Gluster

 4.0K    file_4096

 

 8.0K    file_4097

 4.0K    hole

 

 [[email protected]
filetest]# ll -h

apt-get install flex bison libssl-dev fuse  fuse-utils libevent-dev
libreadline6-dev

 total 24K

 

 -rw-r–r–. 1 root root    0 Jan 10 16:15 file_0

dpkg -i  glusterfs_3.3.0-1_amd64.deb

 -rw-r–r–. 1 root root    1 Jan 10 16:15 file_1

 

 -rw-r–r–. 1 root root    2 Jan 10 16:15 file_2

update-rc.d  glusterd defaults 

 -rwxr-xr-x. 1 root root 4.0K Jan 10 16:15 file_4096

/etc/init.d/glusterd  start 

 -rw-r–r–. 1 root root 4.1K Jan 10 16:15 file_4097

  www.2cto.com  

 -rw-r–r–. 1 root root  25K Jan 10 17:30 hole

安装完成后在server1运行如下命令:

:du命令和ll(ll相当于ls
-l)命令看到的大小不一样啊!我如何知道文件到底是多大呢?我们接下来讨论这个问题

glusterfs  –version 

环境,ext3,块大小格式化为4096byte

 

本文将要说明的问题

glusterfs 3.3.0 built on Jun  4 2012 11:39:45

文件显示大小(ls命令): ext3_inode中的i_size
字段(这个字段是我们以为这个文件应该是多大,比如我们写了一个字节,那么我们就以为这个文件是1个字节大)

Repository revision: git://git.gluster.com/glusterfs.git

文件实际大小(du命令):ext3_inode中的i_blocks字段(这里的block大小固定(与文件系统的块大小不同),固定为512byte,即使文件系统创建块大小为4096byte,这里的block计算始终是512byte),比如我们写了一个字节到这个文件,实际这个文件占用了1个文件系统创建时候的一个块大小。

Copyright (c) 2006-2011 Gluster Inc. <;

文件中的洞是为了节约实际的存储空间,洞不占用实际的磁盘块,isize的显示大小包含洞的大小(比如10M的洞,这10M也会加到文件的大小里面去),磁盘的实际物理块没有存储洞大小(实际没有使用块来存这10M的洞)

GlusterFS comes with ABSOLUTELY NO WARRANTY.

 细节说明

You may redistribute copies of GlusterFS under the terms of the GNU
General Public License.

 echo 1 >/aa               #echo时写入1还会写入一个换行符

 

 echo -n 1 >/bb
#echo 时不会写入末尾换行符

gluster

做以下游戏来观察这个问题

>peer probe server2

我们建立5个不同内容的文件

Probe successful

 for((i=1;i<=4096;i++))do echo -n a>>file_4096;done   

>peer status

 for((i=1;i<=4097;i++))do echo -n a>>file_4097;done

Number of Peers: 1

 for((i=1;i<=1;i++))do echo -n a>>file_1;done

Hostname: server2

 for((i=1;i<=1;i++))do echo a>>file_2;done

Uuid: 7cd93007-fccb-4fcb-8063-133e6ba81cd9

 touch file_0

State: Peer in Cluster (Connected)

ll查看这5个文件

 

 ls -lh

> volume create filestore replica 2 server1:/data/disk01
server2:/data/disk01

 -rw-r–r–. 1 root root    0 Jan 10 16:15 file_0

Creation of volume filestore has been successful. Please start the
volume to access data.

 -rw-r–r–. 1 root root    1 Jan 10 16:15 file_1

 

 -rw-r–r–. 1 root root    2 Jan 10 16:15 file_2

> volume start filestore

 -rw-r–r–. 1 root root 4096 Jan 10 16:15 file_4096

Starting volume filestore has been successful

 -rw-r–r–. 1 root root 4097 Jan 10 16:15 file_4097

 

现在,file_4096有4096byte,file_2有2个byte大小了,5个文件大小如命名

> volume info  filestore 

du 查看这5个文件

Volume Name: filestore

 du -h *

Type: Replicate

 [[email protected]
filetest]# du -h *

Status: Started

 0       file_0

Number of Bricks: 2

 4.0K    file_1

Transport-type: tcp

 4.0K    file_2

Bricks:

 4.0K    file_4096

Brick1: server1:/data/disk01

 8.0K    file_4097

Brick2: server2:/data/disk01

 4.0K    hole

  www.2cto.com  

ext3_inode的磁盘存储格式

mkdir /srv/filestore

 struct ext3_inode {

mount -t glusterfs  server2:/filestore /srv/filstore 

       __le16  i_mode;         /* File mode */

 

       __le16  i_uid;          /* Low 16 bits of Owner Uid */

然后运行mount 或df -h 查看是否挂载上了

       __le32  i_size;         /* Size in bytes */

mount 

       __le32  i_atime;        /* Access time */

 

       __le32  i_ctime;        /* Creation time */

/dev/mapper/server3-root on / type ext4 (rw,errors=remount-ro)

       __le32  i_mtime;        /* Modification time */

proc on /proc type proc (rw,noexec,nosuid,nodev)

       __le32  i_dtime;        /* Deletion Time */

sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)

       __le16  i_gid;          /* Low 16 bits of Group Id */

udev on /dev type devtmpfs (rw,mode=0755)

       __le16  i_links_count;  /* Links count */

devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)

       __le32  i_blocks;       /* Blocks count */

tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)

       ..

/dev/sdb1  on /data/disk01  type ext4 (rw)

       __le32  i_block[EXT3_N_BLOCKS];/* Pointers to blocks */

/dev/sda1 on /boot type ext2 (rw)

       ..

server2:/filestore on /mnt/glusterfs type fuse.glusterfs
(rw,allow_other,default_permissions,max_read=131072)

 }

 

这是ext3具体文件对应inode在磁盘上的实际存储格式
其中,i_size表示文件的显示大小,即我们以为的文件大小。
i_blocks表示实际此文件占用多少个blocks(这里的block大小固定(与文件系统的块大小不同),固定为512byte,不随格式化时候块大小的变化而变化)。

echo  “server1:/filestore /srv/filestore  glusterfs  defaults,_netdev 0
0” >> /etc/fstab   

查出i_size和i_blocks在磁盘上到底存储的值为多少

重启服务器 shutdown -h now  系统启动时挂载server2:/filestore 

找出这5个文件的inode编号

 

 [[email protected]
filetest]# ll -i |sort -k 1

cd /srv/filestore/

 273974 -rw-r–r–. 1 root root 4096 Jan 10 16:15 file_4096

touch {1,2,3,4} 

 273975 -rw-r–r–. 1 root root 4097 Jan 10 16:15 file_4097

dd if=/dev/zero  of=test01 bs=1M count=10 

 273976 -rw-r–r–. 1 root root    1 Jan 10 16:15 file_1

dd if=/dev/zero  of=test02 bs=1M count=10 

 273977 -rw-r–r–. 1 root root    2 Jan 10 16:15 file_2

 

 273978 -rw-r–r–. 1 root root    0 Jan 10 16:15 file_0

ls -l  /srv/filestore

 第一列就是inode的编号

-rw-r–r– 1 root root         0 Oct  8 11:30 1

找出这5个inode在磁盘上的存储位置和内容

-rw-r–r– 1 root root         0 Oct  8 11:30 2

(即具体存在哪个块,内容是什么)
根据ext3磁盘划分格式,我们使用debugfs来查看这个inode所在磁盘具体位置

-rw-r–r– 1 root root         0 Oct  8 11:30 3

 debugfs -R ‘stats’ /dev/sda2

-rw-r–r– 1 root root         0 Oct  8 11:30 4

   …

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test01

   Block size:               4096

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test02

   …

 

   Inodes per group:         8192

在server1 上查看/data/disk01下的内容

   …

ls -l /data/disk01/

   Inode size:               256

 

   …

-rw-r–r– 1 root root         0 Oct  8 11:30 1

   Group 32: block bitmap at 1048576, inode bitmap at 1048592, inode
table at 1048608

-rw-r–r– 1 root root         0 Oct  8 11:30 2

          23336 free blocks, 0 free inodes, 968 used directories, 0
unused inodes

-rw-r–r– 1 root root         0 Oct  8 11:30 3

          [Checksum 0x0cdd]

-rw-r–r– 1 root root         0 Oct  8 11:30 4

   Group 33: block bitmap at 1048577, inode bitmap at 1048593, inode
table at 1049120

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test01

          0 free blocks, 4470 free inodes, 217 used directories, 4470
unused inodes

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test02

          [Checksum 0xd341]

 

   …

在server2上查看/data/disk01下的内容

其中,我们看到Inodes per group:
8192,我们得知这5个inode存储的块组为(inode在ls显示中的编号是从1开始的,内核里面是从0开始的)
273974/8192=33;块组中inode下标为余数3638;(数组下标从0开始)
273975/8192=33;块组中inode下标为余数3639;(数组下标从0开始)
273976/8192=33;块组中inode下标为余数3640;(数组下标从0开始)
273977/8192=33;块组中inode下标为余数3641;(数组下标从0开始)
273978/8192=33;块组中inode下标为余数3642;(数组下标从0开始
同时,我们从debugfs的输出中得知,块组33的inodetable在块号为1049120的数据块中
那么上面5个inode结构体在磁盘上面的具体内容是什么呢
直接去看磁盘上面存的是什么
由于磁盘块大小为4096byte(格式化的时候指定的),inodetable的起始位置为1049120*4096(块号*块大小),所以这5个inode的位置为
file_4096对应的inode在磁盘的
1049120*4096+(3638-1)*256到1049120*4096+3638*256存放着(单位:字节)
我们读取这个inode的磁盘数据 1049120*4096+3637*256=4298126592
我们读写磁盘上面的裸数,看到底存的是什么值

 

 [[email protected]
filetest]# dd if=/dev/sda2 bs=1 count=256 skip=4298126592 |od -t x4
-Ax

ls -l /data/disk01 

 000000 000081a4 00001000 50ee78a8 50ee78a8

-rw-r–r– 1 root root         0 Oct  8 11:30 1

 000010 50ee78a8 00000000 00010000 00000008

-rw-r–r– 1 root root         0 Oct  8 11:30 2

 000020 00080000 00000001 0001f30a 00000004

-rw-r–r– 1 root root         0 Oct  8 11:30 3

 000030 00000000 00000000 00000001 001125c7

-rw-r–r– 1 root root         0 Oct  8 11:30 4

我们先简单确认一下这段数据是不是file_4096结构体在磁盘上面的数据
我们知道

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test01

 struct ext3_inode {

-rw-r–r– 1 root root  10485760 Oct  8 11:31 test02

       __le16  i_mode;         /* File mode */

  www.2cto.com  

前面2字节是访问模式,所以

如果要配置distribute  replication , 可以为replication 再添加两块磁盘。

 [[email protected]
~]# dd if=/dev/sda2 bs=1 count=256 skip=4298126592|od -t x2 -Ax 

 

 000000 81a4 0000 1000 0000 78a8 50ee cdbd 50ef

gluster  volume filestore add-brick server1:/data/disk02
server02:/data/disk02 

得到前面两字节为0x81a4等于八进制100644,为rw,r,r模式,ll查看一下

 

 -rw-r–r–. 1 root root 4096 Jan 10 16:15 file_4096

gluster volume info filestore  就会变成

确实正确,然后我们chmod +x file_4096看结果,ls –l

 

 -rwxr-xr-x. 1 root root 4096 Jan 10 16:15 file_4096

Volume Name: filestore

模式后几位为755才对

Type: Distribute  Replicate 

 [[email protected]
filetest]# dd if=/dev/sda2 bs=1 count=256 skip=4298126592 |od -t x2
-Ax

Status: Started

 000000 81ed 0000 1000 0000 78a8 50ee cde7 50ef

Number of Bricks: 2×2

前面两字节为0x81ed等于八进制100755,为755!就是这个文件

Transport-type: tcp

 其实我们还可以看时间

Bricks:

 创建时间0x50ee78a8=1357805736

Brick1: server1:/data/disk01

 [[email protected]
filetest]# date -d “@1357805736”

Brick2: server2:/data/disk01

 Thu Jan 10 16:15:36 CST 2013

Brick3: server1:/data/disk02

 或者修改文件来看修改实际等等来确认

Brick4: server2:/data/disk02

根据i_size,i_blocks在ext3_inode中的偏移量查看其具体数据

 

由于我们知道i_size,i_blocks在ext3_inode中的具体偏移量

数据需要fix-layout 和migrate-data 一下。

 __le32  i_size;的位置为相对于struct ext3_inode结构体的偏移量为0x4,

12.04 64 bit安装glusterfs 3.3.0配置replica
需要使用两台服务器作gluster replication
server端,同时把server端当client端 server1 10.10.10.10 server2
10.10…

 __le32  i_blocks的偏移量为0x1c

且则两个值都是4字节长度,所以我们下看一下file_4096的i_size和i_blocks到底是多少

 [[email protected]
filetest]# dd if=/dev/sda2 bs=1 count=256 skip=4298126592 |od -t x4
-Ax

 000000 000081ed 00001000 50ee78a8 50efcde7

 000010 50ee78a8 00000000 00010000 00000008

 000020 00080000 00000001 0001f30a 00000004

 000030 00000000 00000000 00000001 001125c7

 000040 00000000 00000000 00000000 00000000

 ..

所以根据偏移量我们可以得到这两个值
i_size=0x00001000=4096,确实为ls显示大小
i_blocks=0x00000008=8,8个块(上面我们已经指出,这里块固定为512字节,与文件系统层次块大小不同),8*512=4096,正好为一个块
所以,file_4096正好为一个块,显示大小为4096 byte,实际大小也为4096byte
同样的方法我们看其余4个file,得到结果如下

 file_4097,

 i_size=0x00001001=4097byte

 i_blocks=0x00000010=16 (16*512=4096*2,即实际占两个块!)

 file_1

 i_size=0x00000001=1byte

 i_blocks=0x00000008=8 (8*512=4096,即1byte也占用1个块)

 file_2

 i_size=0x00000002=2byte

 i_blocks=0x00000008=8 (8*512=4096,即2byte也占用1个块)

 file_0

 i_size=0x00000000=0byte

 i_blocks=0x00000000=0 (0byte不占用任何数据块)

然后我们把i_size和i_blocks的值和ls -l命令和du -h *命令结果对比得知

 i_size和ls命令显示大小相同,所以这是我们以为的大小,比如我写了一个字符到一个文件,我们会以为这个文件大小为1个字节

 i_blocks和du命令显示大小相同,所以这个是我们磁盘存储的实际大小,比如我写了一个字符到一个文件,但实际磁盘占据了一个块(一般是4096byte)大小

带洞的文件如何存储

先科普一下文件的洞

文件的洞是普通文件的一部分,它是一些空字符但没有存放在磁盘的任何数据块中。洞是Unix文件一直存在的一个特点。

引入文件的洞是为了避免磁盘空间的浪费。

文件洞在Ext2的实现是基于动态数据块的分配:只有当进程需要向一个块写数据时,才真正把这个块分配给文件。

磁盘实际存储中,与文件关联的inode的i_block数组(inode关联的具体物理块号数组)仅存放已分配块的逻辑块号,而数组中的其它元素都为空。

我们来看一下具体的磁盘上文件的洞如何存储

 echo -n “a” | dd of=/root/filetest/hole bs=4096 seek=6

表示对于文件/root/filetest,前面4096*6byte全部跳过,然后写入一个字符“a”,我们用上面的方法看一下

ls -a命令查看

 273979 -rw-r–r–.  1 root root 24577 Jan 10 17:30
hole,这个文件显示占用了24577byte,可是实际占用多少磁盘呢?

du -h hole命令查看

 4.0K    hole

dump磁盘上面的16进制数据来看

 i_size=0x00006001=24577

 i_blocks=0x00000008
(8*512=4096byte,占1个块大小!空洞不占用实际的数据块!)

总结

ls命令看到的是文件的显示大小

 即磁盘上inode结构体中的i_size值,单位byte

du命令看到的是文件的实际磁盘存储大小

 即磁盘上inode结构体中的i_blocks*512,单位byte

 i_blocks固定为512byte,这和文件系统格式化的时候的块大小不同且不随文件系统格式化块大小的变化而变化

文件的洞不会再磁盘上面占用实际的存储空间块

 即文件如果包含200M的洞,这200M不占用时间的磁盘块

文件的洞在ls显示的时候包含文件的洞

 即文件如果包含200M的洞,ls就会加上这200M的空洞

 注:我这里是从磁盘的实际存储数据来对比ls,du显示结果,并没有直接查看ls,du命令的源码,如果有错误,欢迎指正~

 

目录 1
前言 www.2cto.com 2 本文将要说明的问题 3 做以下游戏来观察这个问题 3.1
我们建立5个不…

发表评论

电子邮件地址不会被公开。 必填项已用*标注