2015-09-07 5 views
0

Мне нужно создать и отформатировать блок-устройство и скопировать все файлы в подкаталог в него. В идеале для форматированного блочного устройства будет достаточно места для размещения файлов. Не имеет значения, если он не подходит, но он должен быть достаточно близок - в идеале, в десятках мегабайт.Как создать блочное устройство, которое «просто подходит» в подкаталоге?

Но это не так просто, как кажется. Сначала мне нужно измерить размер файлов в подкаталоге, а затем создать блок-устройство.

Но блок-устройство не может быть того же размера, что и файлы, потому что некоторое пространство будет занято форматированием информации, которую я предполагаю. Также будет занято некоторое пространство, потому что предположительно файлы не обязательно используют все доступное пространство в каждом блоке диска.

Я не думаю, что важно, какое устройство блока я создаю, но если вы считаете, что это важно, я создаю том EBS на Amazon EC2.

У кого-нибудь есть комментарии о том, как лучше всего это сделать?

Вот мой Python код для вычисления размера каталога:

def get_directory_size(start_path=None): 
    print(start_path) 
    total_size = 0 
    for dirpath, dirnames, filenames in os.walk(start_path): 
     for f in filenames + dirnames: 
      fp = os.path.join(dirpath, f) 
      if os.path.islink(fp): 
       # ignore symbolic links 
       continue 
      total_size += os.path.getsize(fp) 
    return total_size 
+0

Использование какой-либо файловой системы? – duskwuff

+0

Если я должен был быть конкретным, ext2 или ext4. –

ответ

3

Если вы используете файловую систему в семействе внутр (например, ext3 или ext4), вы можете начать с файловой системой, что это больше, чем нужно , затем используйте resize2fs -M, чтобы изменить размер файловой системы до минимального размера. Это приведет только к изменению размера файловой системы, а не к ее содержащему блочному устройству, но после этого вы можете изменить размер раздела или скопировать данные на новое блочное устройство соответствующего размера, если хотите.

Если приемлемая для файловой системы, доступная только для чтения, вы можете использовать что-то вроде SquashFS, что позволит создать файловую систему с целевым размером за один шаг.