понедельник, 11 мая 2015 г.

Сконвертировать regular файл в sparse в Linux

В процессе подготовки staging хоста из забыл указать "-S" в опциях tar и получил 40G файл, вместо реальных 2.7M. Это файл базы данных LDAP в Zimbra и изначально он разреженный (sparse file). Терять столько места не было желания, поэтому я сконвертировал его обратно в sparse file:

# cp -a --sparse=always /opt/zimbra/data/ldap/mdb/db/data.mdb /opt/zimbra/data/ldap/mdb/db/data.sparse.mdb
# mv /opt/zimbra/data/ldap/mdb/db/data.sparse.mdb /opt/zimbra/data/ldap/mdb/db/data.mdb
# du -sh /opt/zimbra/data/ldap/mdb/db/data.mdb
2.7M /opt/zimbra/data/ldap/mdb/db/data.mdb
# du -sh --apparent-size /opt/zimbra/data/ldap/mdb/db/data.mdb
40G /opt/zimbra/data/ldap/mdb/db/data.mdb

Теперь все правильно.

UPDATE: +Maksim Melnikau посоветовал использовать fallocate для этих целей.
Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).
Выглядит это так:

# fallocate --dig-holes /opt/zimbra/data/ldap/mdb/db/data.mdb

Я проверил в контейнере openvz на ноде с centos 6 - работает.

Комментариев нет:

Отправить комментарий