Я аспірант обчислювальної хімії з доступом до кластеру Linux. Кластер складається з дуже великого (25 ТБ) файлового сервера, до якого підключено кілька десятків обчислювальних вузлів. Кожен обчислювальний вузол складається з 8 до 24 ядер Intel Xeon. Кожен обчислювальний вузол також містить локальний диск близько 365 ТБ.
Оскільки до сервера файлових файлів регулярно звертаються десяток користувачів в дослідницькій групі, файлсервер використовується в основному для довготривалого зберігання файлів (він створюється резервна копія вночі, тоді як локальні диски обчислювальних вузлів ніколи не створюються резервними копіями). Таким чином, системний адміністратор доручив нам запустити моделювання на локальних дисках - які мають швидший введення-виведення, ніж сервер файлів, - щоб не уповільнити файловий сервер для інших користувачів.
Отже, я запускаю симуляції на локальних дисках, а потім, після їх закінчення, копіюю файли траєкторії - я виконую моделювання молекулярної динаміки (MD) - у файл-сервер для зберігання. Припустимо , у мене є файл з ім'ям траєкторії traj.trr
в директорії на локальному диску вузла, /home/myusername/mysimulation1/traj.trr
. Для тривалого зберігання, я завжди скопіювати traj.trr
в каталог у файловому, ~/mysimulation1/traj.trr
де ~
представляє свій каталог в файловому, /export/home/myusername
. Після копіювання я звично використовую, du -h
щоб перевірити, чи /home/myusername/mysimulation1/traj.trr
має той самий розмір файлу, що і ~/mysimulation1/traj.trr
. Таким чином, я можу бути принаймні обґрунтовано впевнений, що передача на сервер файлів пройшла успішно. Наприклад:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
Якщо два дзвінки du -h
надати однаковий розмір файлу, прочитаного людиною, я можу бути впевненим, що передача / копія була успішною. (Мої типові traj.trr
файли мають розмір приблизно від 15 до 20 Гб, залежно від точного моделювання, яке я запустив.) Якщо я запускаю du
(тобто без -h
комутатора) на два traj.trr
файли, їх розміри в байтах зазвичай дуже-дуже схожі - - як правило, всього в декількох байтах. Я використовую цей загальний метод останні півтора року, без проблем.
Однак останнім часом у мене виникла така проблема: інодіdu -h
повідомляється, що дваtraj.trr
файли відрізняються за розміром на кілька ГБ. Ось приклад:
cd /home/myusername/mysimulation1/ # this is the local disk
cp -v traj.trr ~/mysimulation1/
du traj.trr -h
cd ~/mysimulation1/ # this is the fileserver
du traj.trr -h
Вихід із двох дзвінків до du -h
наступного:
20G traj.trr
28G traj.trr
Я вважаю, що колишній (тобто, на traj.trr
локальному диску /home/myusername/mysimulation1/
), - це правильний розмір файлу, оскільки очікується, що мої траєкторії моделювання становитимуть приблизно 15-20 ГБ кожна. Але як тоді файл на сервері файлів насправді може бути більшим ? Я міг бачити, як він може бути меншим, якби якось cp
передача не вдалася. Але я не бачу, як це насправді може бути більшим .
Я отримую аналогічний вихід, коли виконую ті ж команди, що і вище, але без -h
перемикача, заданого для du
:
20717480 traj.trr
28666688 traj.trr
Чи можете ви придумати якусь причину різниці?
Якщо якимось випадковим випадком du
якимось чином не працює, я можу з цим все гаразд. Але мені просто потрібно переконатися, що копія traj.trr
файлового сервера є повною та ідентичною його вихідній версії на локальному диску. Мені потрібно видалити локальний файл, щоб у мене було достатньо місцевого дискового простору для запуску нових симуляцій, але я не можу дозволити собі traj.trr
пошкодити версію файлового сервера.
Формат .trr файлу (з пакета молекулярної динаміки Gromacs) являє собою бінарний формат, а не текст. Таким чином, я не впевнений, чи можна надійно порівняти файли такою програмою, як diff
.
md5sum
на два файли. Дві контрольні суми відповідають. Я думаю, це означає, що два файли однакові?
ls -l
? Команда du
повідомляє, скільки місця на диску використовується для вашого файлу, а не наскільки великий ваш файл. На розмір диска може впливати ваша файлова система та її стратегія розподілу.
ls -l -h
говорить, що обидва файли мають 20 Гб. Так само ls -l
говорить, що обидва файли мають 21214683940 байт. Тому я здогадуюсь, що файли однакового розміру, але не використовують однакову кількість дискового простору (згідно du
).
md5sum
абоsha1sum
на файлах. Вони відповідають?