diff --git a/pkg/vm/engine/tae/dataio/segmentio/segment_test.go b/pkg/vm/engine/tae/dataio/segmentio/segment_test.go
index f2688bb17f2adb4b269083e75be415e36fda38ef..22d4c182c07c8b32e8c5329d90a4688624f41188 100644
--- a/pkg/vm/engine/tae/dataio/segmentio/segment_test.go
+++ b/pkg/vm/engine/tae/dataio/segmentio/segment_test.go
@@ -99,7 +99,7 @@ func TestSegmentFile_Replay(t *testing.T) {
 	}
 
 	seg = SegmentFileIOOpenFactory(name, id)
-	cache := bytes.NewBuffer(make([]byte, 10240*4096))
+	cache := bytes.NewBuffer(make([]byte, 2*1024*1024))
 	err := seg.Replay(colCnt, indexCnt, cache)
 	assert.Nil(t, err)
 	for i := 0; i < 20; i++ {
diff --git a/pkg/vm/engine/tae/layout/segment/log.go b/pkg/vm/engine/tae/layout/segment/log.go
index 449a7122e86152d1f4350eb55560c72d87ce5957..34adf583b0cab680e1f5e9b360cc5c7882dbd8fd 100644
--- a/pkg/vm/engine/tae/layout/segment/log.go
+++ b/pkg/vm/engine/tae/layout/segment/log.go
@@ -154,14 +154,14 @@ func (l *Log) replayData(data *bytes.Buffer, offset int64) (pos int, hole uint32
 			return 0, hole, err
 		}
 		if n == 0 {
-			if int(l.logFile.segment.super.blockSize) == cache.Len() {
+			if int(l.logFile.segment.super.inodeSize) == cache.Len() {
 				break
 			}
-			cache = bytes.NewBuffer(cache.Bytes()[l.logFile.segment.super.blockSize-magicLen:])
-			hole += l.logFile.segment.super.blockSize
+			cache = bytes.NewBuffer(cache.Bytes()[l.logFile.segment.super.inodeSize-magicLen:])
+			hole += l.logFile.segment.super.inodeSize
 			continue
 		}
-		seekLen := l.logFile.segment.super.blockSize - (uint32(n) % l.logFile.segment.super.blockSize)
+		seekLen := l.logFile.segment.super.inodeSize - (uint32(n) % l.logFile.segment.super.inodeSize)
 		if file.snode.state == REMOVE {
 			l.logFile.segment.nodes[file.name] = file
 		} else {
@@ -266,7 +266,7 @@ func (l *Log) Append(file *BlockFile) error {
 			return err
 		}
 	}
-	ibufLen := (segment.super.blockSize - (uint32(ibuffer.Len()) % segment.super.blockSize)) + uint32(ibuffer.Len())
+	ibufLen := (segment.super.inodeSize - (uint32(ibuffer.Len()) % segment.super.inodeSize)) + uint32(ibuffer.Len())
 	offset, allocated := l.allocator.Allocate(uint64(ibufLen))
 	if n, err := segment.segFile.WriteAt(ibuffer.Bytes(), int64(offset+LOG_START)); err != nil || n != ibuffer.Len() {
 		return err
diff --git a/pkg/vm/engine/tae/layout/segment/segment.go b/pkg/vm/engine/tae/layout/segment/segment.go
index 27f2d641c4ed04eee8c96f62b87c4ad76d4dbd23..d44e79061f84e6dcec8b70812a0f266e3368bc6e 100644
--- a/pkg/vm/engine/tae/layout/segment/segment.go
+++ b/pkg/vm/engine/tae/layout/segment/segment.go
@@ -24,19 +24,21 @@ import (
 	"sync"
 )
 
-const INODE_NUM = 10240
+const INODE_NUM = 4096
+const INODE_SIZE = 512
 const BLOCK_SIZE = 4096
 const SIZE = 4 * 1024 * 1024 * 1024
-const LOG_START = 2 * 4096
-const DATA_START = LOG_START + BLOCK_SIZE*INODE_NUM
+const LOG_START = 2 * INODE_SIZE
+const DATA_START = LOG_START + INODE_SIZE*INODE_NUM
 const DATA_SIZE = SIZE - DATA_START
 const LOG_SIZE = DATA_START - LOG_START
-const HOLE_SIZE = 512 * BLOCK_SIZE
+const HOLE_SIZE = 512 * INODE_SIZE
 const MAGIC = 0xFFFFFFFF
 
 type SuperBlock struct {
 	version   uint64
 	blockSize uint32
+	inodeSize uint32
 	colCnt    uint32
 	lognode   *Inode
 	state     StateType
@@ -61,6 +63,7 @@ func (s *Segment) Init(name string) error {
 	s.super = SuperBlock{
 		version:   1,
 		blockSize: BLOCK_SIZE,
+		inodeSize: INODE_SIZE,
 	}
 	log := &Inode{
 		magic: MAGIC,
@@ -136,7 +139,7 @@ func (s *Segment) Mount() {
 	s.log.seq = seq + 1
 	s.nodes[logFile.name] = s.log.logFile
 	s.allocator = NewBitmapAllocator(DATA_SIZE, s.GetPageSize())
-	s.log.allocator = NewBitmapAllocator(LOG_SIZE, s.GetPageSize())
+	s.log.allocator = NewBitmapAllocator(LOG_SIZE, s.GetInodeSize())
 }
 
 func (s *Segment) Unmount() {
@@ -162,6 +165,7 @@ func (s *Segment) Replay(cache *bytes.Buffer) error {
 	s.super = SuperBlock{
 		version:   1,
 		blockSize: BLOCK_SIZE,
+		inodeSize: INODE_SIZE,
 	}
 	log := &Inode{
 		magic: MAGIC,
@@ -274,6 +278,10 @@ func (s *Segment) GetPageSize() uint32 {
 	return s.super.blockSize
 }
 
+func (s *Segment) GetInodeSize() uint32 {
+	return s.super.inodeSize
+}
+
 func (s *Segment) Sync() error {
 	return s.segFile.Sync()
 }
diff --git a/pkg/vm/engine/tae/layout/segment/segment_test.go b/pkg/vm/engine/tae/layout/segment/segment_test.go
index c5a0a0349c4b9a0ab89d94e4ecf38a270a9cc913..8cca29973c9101333cf1ebad3c3b80d15d32341a 100644
--- a/pkg/vm/engine/tae/layout/segment/segment_test.go
+++ b/pkg/vm/engine/tae/layout/segment/segment_test.go
@@ -270,7 +270,7 @@ func TestSegment_Replay2(t *testing.T) {
 	assert.Nil(t, err)
 	seg.Mount()
 	var file *BlockFile
-	for i := 0; i < 5120; i++ {
+	for i := 0; i < INODE_NUM/2; i++ {
 		file = seg.NewBlockFile(fmt.Sprintf("test_%d.blk", i))
 		file.snode.algo = compress.None
 		err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i)))
@@ -278,7 +278,7 @@ func TestSegment_Replay2(t *testing.T) {
 		err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i)))
 		assert.Nil(t, err)
 	}
-	for i := 5120; i < 10240; i++ {
+	for i := INODE_NUM / 2; i < INODE_NUM; i++ {
 		file = seg.NewBlockFile(fmt.Sprintf("test_%d.blk", i))
 		file.snode.algo = compress.None
 		err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i)))
@@ -293,7 +293,7 @@ func TestSegment_Replay2(t *testing.T) {
 	cache := bytes.NewBuffer(make([]byte, 2*1024*1024))
 	err = seg1.Replay(cache)
 	assert.Nil(t, err)
-	assert.Equal(t, 10241, len(seg1.nodes))
+	assert.Equal(t, INODE_NUM+1, len(seg1.nodes))
 	checkSegment(t, &seg, &seg1)
 }