VictorSh
20-07-2011, 20:17
Здравствуйте.
Имеется ОС FreeBSD 6.2
При копировании на внешний винт содержимого RAID массива с помощью 2 разных способов получаются сильно отличающиеся итоговый размер источника и размер файлов на целевом диске.
Исходные файлы (RAID массив, da0) находятся в папке /data
Целевой диск ad6 я подмонтировал в /mnt/data2
Команда, которой я воспользовался для копирования (СПОСОБ 1):
#nohup cp -P -R -p /data /mnt/data2 > /usr/home/XXXX/cp.txt
Получилось, что целевый файлы занимают на 50% больше, чем исходные! Причем я задал не обходить ссылки в cp.
Вот вывод команды: df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 496M 331M 125M 73% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s1d 124M 566K 113M 0% /tmp
/dev/ad4s1f 3.9G 2.7G 846M 77% /usr
/dev/ad4s1g 65G 4.3G 55G 7% /usr/data
/dev/ad4s1e 990M 333M 578M 37% /var
/dev/da0 1.1T 984G 12G 99% /data
/dev/ad6p1 2.6T 1.4T 1.0T 58% /mnt/data2
devfs 1.0K 1.0K 0B 100% /var/named/dev
Внешний винт (ad6) разбивал как GPT с помощью утилиты gpt.
Правда потом выяснилось, что размеры кластеров отличаются в /data и /mnt/data2
Вот, что выдает dumpfs -m /dev/da0
# newfs command for /dev/da0 (/dev/da0)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 8 -o time -s 585921024 /dev/da0
Для ad6 та же команда выдает:
# newfs command for /dev/ad6p1 (/dev/ad6p1)
newfs -O 2 -U -a 32 -b 4096 -d 4096 -e 512 -f 2048 -g 16384 -h 64 -m 8 -o time -s 1465133275 /dev/ad6p1
НО! размер кластера в ad6 меньше! значит, что потерь на маленьких файлах должно быть меньше потерь, то есть размер по крайней мере должен быть меньше или тот же, а у меня получается намного больше!
хотя еще непонятно насчет кластера. Смотрю до создания маленького файла в какой нибудь папке ad6 размер командой du -hsx. Потом создаю файл в несколько байт, меньше 512. Смотрю опять du -hsx - разница на 2048. То же и на da0 и ad4 дисках. Хотя в newfs написано, что минимум размер кластера можно сделать 4К, а вывод dumpfs говорит, что вообще имеется 16К кластер.
Потом сделал СПОСОБ 2.
Удалил GPT разделы с внешнего диска. Пересоздал. Инициализировал ФС на ad6 с помощью команды:
# newfs command for /dev/da0 (/dev/da0)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 4 /dev/ad6p1
Подмонтировал ad6p1 в /mnt/data2
Запустил Midnight Commander с помощью утилиты screen (так как копировать долго, чтобы можно было терминал закрыть).
Открыл в одном окне /data, а в другом /mnt/data2, нажимаю F5, из опций копирования выбраны: Using Shell Patterns и preserve attributes.
Нажимаю ОК. Через часов этак 20, когда закончится копирование, смотрю вывод команды df -h
[root@server /usr/home/XXXX]# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 496M 331M 125M 73% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s1d 124M 570K 113M 0% /tmp
/dev/ad4s1f 3.9G 2.7G 846M 77% /usr
/dev/ad4s1g 65G 4.3G 55G 7% /usr/data
/dev/ad4s1e 990M 337M 574M 37% /var
/dev/da0 1.1T 992G 3.9G 100% /data
devfs 1.0K 1.0K 0B 100% /var/named/dev
/dev/ad6p1 2.6T 726G 1.8T 28% /mnt/data2
Размер ad6 намного меньше теперь, при одинаковых файловых системах.
Пробовал заходить в каждую папку в /data и /mnt/data2 и сравнивать размеры командами:
du -hsx
LANG=C find . -type f -ls | awk '{ sum+= $7 } END { print sum }' (общее количество байт, как в Windows суммарный размер файлов, а не сколько они занимают на диске).
ls -l -R | grep ^- | wc -l (количество файлов в каждой папке)
Почти везде одиаково, в сумме даже на da0 около 727G получается, а не 992G.
Единственное, что в /data/temp и /mnt/data2/temp при одних и тех же папках (там 0 файлов) du -hsx выдает для ad6 6К, а для da0 8К.
Вопросы:
Не пойму как мне убедиться, что все скопировалось правильно?
Как правильно определить размер кластера(блока)? И почему когда я создаю один маленький файл, разница в размерах составляет число, несовпадающее с числом в newfs -b?
Почему такие сильные отличия в размерах при копировании получаются?
P.S. Не хочется пользоваться командой dump/restore, так как они сохраняют все в один файл-образ.
Имеется ОС FreeBSD 6.2
При копировании на внешний винт содержимого RAID массива с помощью 2 разных способов получаются сильно отличающиеся итоговый размер источника и размер файлов на целевом диске.
Исходные файлы (RAID массив, da0) находятся в папке /data
Целевой диск ad6 я подмонтировал в /mnt/data2
Команда, которой я воспользовался для копирования (СПОСОБ 1):
#nohup cp -P -R -p /data /mnt/data2 > /usr/home/XXXX/cp.txt
Получилось, что целевый файлы занимают на 50% больше, чем исходные! Причем я задал не обходить ссылки в cp.
Вот вывод команды: df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 496M 331M 125M 73% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s1d 124M 566K 113M 0% /tmp
/dev/ad4s1f 3.9G 2.7G 846M 77% /usr
/dev/ad4s1g 65G 4.3G 55G 7% /usr/data
/dev/ad4s1e 990M 333M 578M 37% /var
/dev/da0 1.1T 984G 12G 99% /data
/dev/ad6p1 2.6T 1.4T 1.0T 58% /mnt/data2
devfs 1.0K 1.0K 0B 100% /var/named/dev
Внешний винт (ad6) разбивал как GPT с помощью утилиты gpt.
Правда потом выяснилось, что размеры кластеров отличаются в /data и /mnt/data2
Вот, что выдает dumpfs -m /dev/da0
# newfs command for /dev/da0 (/dev/da0)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 8 -o time -s 585921024 /dev/da0
Для ad6 та же команда выдает:
# newfs command for /dev/ad6p1 (/dev/ad6p1)
newfs -O 2 -U -a 32 -b 4096 -d 4096 -e 512 -f 2048 -g 16384 -h 64 -m 8 -o time -s 1465133275 /dev/ad6p1
НО! размер кластера в ad6 меньше! значит, что потерь на маленьких файлах должно быть меньше потерь, то есть размер по крайней мере должен быть меньше или тот же, а у меня получается намного больше!
хотя еще непонятно насчет кластера. Смотрю до создания маленького файла в какой нибудь папке ad6 размер командой du -hsx. Потом создаю файл в несколько байт, меньше 512. Смотрю опять du -hsx - разница на 2048. То же и на da0 и ad4 дисках. Хотя в newfs написано, что минимум размер кластера можно сделать 4К, а вывод dumpfs говорит, что вообще имеется 16К кластер.
Потом сделал СПОСОБ 2.
Удалил GPT разделы с внешнего диска. Пересоздал. Инициализировал ФС на ad6 с помощью команды:
# newfs command for /dev/da0 (/dev/da0)
newfs -O 2 -U -a 8 -b 16384 -d 16384 -e 2048 -f 2048 -g 16384 -h 64 -m 4 /dev/ad6p1
Подмонтировал ad6p1 в /mnt/data2
Запустил Midnight Commander с помощью утилиты screen (так как копировать долго, чтобы можно было терминал закрыть).
Открыл в одном окне /data, а в другом /mnt/data2, нажимаю F5, из опций копирования выбраны: Using Shell Patterns и preserve attributes.
Нажимаю ОК. Через часов этак 20, когда закончится копирование, смотрю вывод команды df -h
[root@server /usr/home/XXXX]# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1a 496M 331M 125M 73% /
devfs 1.0K 1.0K 0B 100% /dev
/dev/ad4s1d 124M 570K 113M 0% /tmp
/dev/ad4s1f 3.9G 2.7G 846M 77% /usr
/dev/ad4s1g 65G 4.3G 55G 7% /usr/data
/dev/ad4s1e 990M 337M 574M 37% /var
/dev/da0 1.1T 992G 3.9G 100% /data
devfs 1.0K 1.0K 0B 100% /var/named/dev
/dev/ad6p1 2.6T 726G 1.8T 28% /mnt/data2
Размер ad6 намного меньше теперь, при одинаковых файловых системах.
Пробовал заходить в каждую папку в /data и /mnt/data2 и сравнивать размеры командами:
du -hsx
LANG=C find . -type f -ls | awk '{ sum+= $7 } END { print sum }' (общее количество байт, как в Windows суммарный размер файлов, а не сколько они занимают на диске).
ls -l -R | grep ^- | wc -l (количество файлов в каждой папке)
Почти везде одиаково, в сумме даже на da0 около 727G получается, а не 992G.
Единственное, что в /data/temp и /mnt/data2/temp при одних и тех же папках (там 0 файлов) du -hsx выдает для ad6 6К, а для da0 8К.
Вопросы:
Не пойму как мне убедиться, что все скопировалось правильно?
Как правильно определить размер кластера(блока)? И почему когда я создаю один маленький файл, разница в размерах составляет число, несовпадающее с числом в newfs -b?
Почему такие сильные отличия в размерах при копировании получаются?
P.S. Не хочется пользоваться командой dump/restore, так как они сохраняют все в один файл-образ.