Нет никакого лучшего ноутбука для Linux, потому что это в большой степени зависит от Вашего использования. Я рекомендовал бы получить ноутбук с предварительно установленным Linux.
Кроме этого я могу безопасно сказать, что Стремиться Временная шкала 1810T запускает Linux очень хорошо, но это - только субноутбук.
Там существует приложение, разработанное для этого: dirsplit
Это обычно живет в cdrkit
или dirsplit
пакеты.
Это может создать готовые к использованию папки со ссылками для легкого создания DVD с K3b или другим программным обеспечением GUI
Я когда-то сделал ужасный сценарий для подобной цели. Это - просто клудж, но когда я записал это, я не заботился о времени выполнения или привлекательности. Я уверен, что существует больше "productified" версий того же понятия вокруг, но Если Вы хотите получить некоторое представление или что-то, чтобы начать взламывать на, здесь идет (сделал это в 2008, таким образом используйте на Ваш собственный риск!) :-)
#!/bin/sh -
REPO=/export/foton/PictureStore
LINKS=/export/foton/links
SPLITTIX=`date '+%y%m%d-%H%M'`
# kilobytes
DVDSIZE=4400000
PARTPREFIX="DVD-"
REPOSIZE=`du -sk -- ${REPO} | awk '{print $1}'`
NUMPARTS=`expr $REPOSIZE / $DVDSIZE`
SPLITDIR=${LINKS}/splits/${SPLITTIX}
mkdir -p -- "$SPLITDIR"
PARTNUM=1
PARTSIZ=0
DONESIZ=0
PARTNUM=`echo $PARTNUM | awk '{printf("%03x", $0)}'`
mkdir -p -- "${SPLITDIR}/${PARTPREFIX}${PARTNUM}"
for D in "${REPO}"/..?* "${REPO}"/.[!.]* "${REPO}"/*
do
if [ ! -e "$D" ]; then continue; fi # skip ..?*, .[!.]* and * if there are no matching files
D=${D#$REPO/}
D_SIZ=`du -sk -- "${REPO}/$D" | awk '{print $1}'`
if test `expr $D_SIZ + $PARTSIZ` -le $DVDSIZE
then
# link to D in this part
ln -s -- "$REPO/$D" "${SPLITDIR}/${PARTPREFIX}${PARTNUM}/$D"
# adjust counters
PARTSIZ=`expr $PARTSIZ + $D_SIZ`
DONESIZ=`expr $DONESIZ + $D_SIZ`
else
# next part and link to D in that
echo PART $PARTNUM: $PARTSIZ kb '(target' $DVDSIZE 'kb)'
PARTNUM=`expr $PARTNUM + 1`
PARTNUM=`echo $PARTNUM | awk '{printf("%03x", $0)}'`
PARTSIZ=$D_SIZ
DONESIZ=`expr $DONESIZ + $D_SIZ`
mkdir -p -- "${SPLITDIR}/${PARTPREFIX}${PARTNUM}"
ln -s -- "$REPO/$D" "${SPLITDIR}/${PARTPREFIX}${PARTNUM}/$D"
fi
done
echo "wrote $DONESIZ kb in $PARTNUM parts in $SPLITDIR"
Я думаю, что мне совместно использовали результат через самбу к хосту окон, который записал диски от него. При использовании неизменного вышеупомянутого можно хотеть использовать mkisofs
или другой archiver, который разрешает символьные ссылки.
\[?*
). Предложенное чтение: не анализируйте вывод ls, $VAR по сравнению с $ {VAR} и заключить в кавычки или не заключить в кавычки. Обратите внимание, что я не протестировал получающийся сценарий. Если Вы не понимаете моих изменений, не стесняйтесь спрашивать.
– Gilles 'SO- stop being evil'
28.03.2011, 22:03
[
в противоположность test
, хотя)...
– MattBianco
29.03.2011, 17:54
Я однажды записал сценарий для решения подобной проблемы - я звонил, это "распределяет" (можно прочитать основной код сценария или файла с сообщением справки, или загрузить его как пакет); из его описания:
распределите - Распределяют набор пакетов на нескольких CD (особенно хороший для будущего использования с APT)
Описание: 'распределите' программу, делает выполнение задач связанным с созданием набора CD для распределения набора пакетов легче. Задачи включают: разметка файловой системы CD (разделяющий большое количество пакетов в несколько дисков и т.д.), готовя набор к использованию APT (индексация), создание ISO-образов и запись дисков.
Периодические обновления первоначально распределенного набора могут быть выпущены со справкой, 'распределяют'.
Это делает целый процесс на нескольких этапах: однажды, это создает furure диск "разметки" при помощи символьных ссылок на исходные файлы - таким образом, можно вмешаться и изменить будущие дисковые деревья.
Детали о его использовании могут быть считаны в сообщении справки, распечатанном сценарием (или путем изучения исходного кода).
Это было записано с более более хитрым вариантом использования в памяти (выпускающий обновления как "разность" - набор добавленных новых файлов - к первоначально зарегистрированному набору файлов), таким образом, это включает один дополнительный начальный этап, а именно, "фиксируя" текущее состояние набора файлов (для простоты, это делает это путем тиражирования исходного набора файлов посредством символьных ссылок в специальном рабочем месте для сохранения состояний набора; затем, некоторое время в будущем, это сможет создать разность между будущим текущим состоянием набора файлов и этим сохраненным состоянием). Так, хотя Вам, возможно, не понадобилась бы эта функция, Вы не можете пропустить этот начальный этап, AFAIR.
Кроме того, я не уверен теперь (я записал это довольно много лет назад), обращается ли это со сложными деревьями хорошо, или это, как предполагается, разделяет только плоскость (один уровень) каталоги файлов. (Изучите сообщение справки или исходный код, чтобы быть уверенными; я буду искать это также немного позже, когда у меня будет некоторое время.)
Связанный с APT материал является дополнительным, не обращайте внимание, что это может подготовить наборы пакета, которые будут использоваться APT, если Вам не нужно это.
Если Вы заинтересованы, конечно, не стесняйтесь переписывать его к своим потребностям или предлагать улучшения.
(Обратите внимание, что пакет включает дополнительные полезные патчи, не примененные в представленном листинге кода в Мерзавце repo связанный выше!)
distribute
это решает существенную задачу, о которой спрашивают здесь.
– imz -- Ivan Zakharyaschev
30.03.2011, 21:10
Мы не должны забывать, что сущность задачи действительно довольно проста; как вставлено учебное руководство на Haskell (то, которое записано вокруг работы через решения для этой задачи, инкрементно совершенствовало),
Теперь давайте думать на мгновение о том, как наша программа будет управлять и выражать это в псевдокоде:
main = Read list of directories and their sizes. Decide how to fit them on CD-Rs. Print solution.
Разумные звуки? Я думал так.
Давайте упростим нашу жизнь немного и предположим на данный момент, что мы вычислим размеры каталога где-нибудь вне нашей программы (например, с"
du -sb *
"), и читают эту информацию из stdin.
(от Автостопщиков ведут Haskell, Главе 1),
(Additionaly, в Вашем вопросе, требуется смочь настроить (редактируют) получающиеся структуры диска и затем используют инструмент для записи их.)
Вы могли снова использовать (адаптируйтесь и повторное использование), простой вариант программы, от что учебное руководство Haskell для разделения Вашего набора файла.
К сожалению, в distribute
инструмент, который я упомянул здесь в другом ответе, простоте существенной задачи разделения, не подобран сложностью и чрезмерно увеличенный в размерах из пользовательского интерфейса distribute
(потому что это было записано для объединения нескольких задач; хотя выполнено шаг за шагом, но все еще объединенный не самым чистым способом я мог думать теперь).
Чтобы помочь Вам некоторые использовать его код, вот, выборка из кода удара distribute
(в строке 380), который служит, чтобы сделать эту "существенную" задачу разделения набора файлов:
# Splitting:
function splitMirrorDir() {
if [[ ! -d "$THIS_BASES_DIR/$BASE/$type" ]]; then
echo $"No base fixed for $type" >&2
exit 1
fi
# Getting the list of all suitable files:
local -a allFiles
let 'no = 0' ||:
allFiles=()
# no points to the next free position in allFiles
# allFiles contains the constructed list
for p in "$THIS_BASES_DIR/$BASE/$type"/*.rpm; do
if [[ ! -e "$p" ]]; then
# fail on non-existent files
echo $"Package file doesn't exist: " "$p" >&2
return 1
fi
if [[ "$ONLY_REAL_FILES" == "yes" && ! -f "$p" ]]; then
continue
fi
if [[ "$DIFF_TO_BASE" ]]; then
older_copy="$DIFF_TO_BASE/$type/${p##*/}" # using shell param expansion instead of `basename' to speed up
if [[ -h "$older_copy" || -a "$older_copy" ]]; then
continue
fi
fi
allFiles[$(( no++ ))]="$p"
done
readonly -a allFiles
# Splitting the list of all files into future disks:
#
local -a filesToEat allSizes
let 'no = 0' ||:
filesToEat=()
allSizes=($(getSize "${allFiles[@]}"))
readonly -a allSizes
# allSizes contains the sizes corrsponding to allFiles
# filesToEat hold the constructed list of files to put on the current disk
# no points to the next free position in filesToEat
# totalSize should hold the sum of the sizes
# of the files already put into filesToEat;
# it is set and reset externally.
for p in "${allFiles[@]}"; do
if (( totalsize + ${allSizes[$(( no ))]} > CDVOLUME )); then
eatFiles "${filesToEat[@]}"
filesToEat=()
finishCD
startTypedCD
fi
let "totalsize += ${allSizes[$(( no ))]}" ||:
filesToEat[$(( no++ ))]="$p"
done
eatFiles "${filesToEat[@]}"
}
function eatFiles() {
#{ oldIFS="$IFS"; IFS=$'\n'; echo "$FUNCNAME: args: " "$*" | head >&2; IFS="$oldIFS"; }
zeroDelimited "$@" | xargs -0 --no-run-if-empty \
cp -s \
--target-dir="$THIS_LAYOUTS_DIR/cd$(( cdN ))/$PREFIX/$type$DOT_SUFFIX"/ \
--
}
function startTypedCD() {
# set -x
mkdir -p "$THIS_LAYOUTS_DIR/cd$(( cdN ))/$PREFIX/$type$DOT_SUFFIX"
start_action $" %s with %s" "$(( cdN ))" "$type"
# set +x
}
function finishCD() {
(читайте больше после строки 454),
Обратите внимание что eatFiles
функция готовит разметки будущих дисков как деревья, где листы являются символьными ссылками на реальные файлы. Так, это отвечает Вашему требованию, что необходимо смочь отредактировать разметки перед записью. mkisofs
утилита имеет опцию следовать за символьными ссылками, который действительно используется в коде моего mkiso
функция.
Представленный сценарий (который можно взять и переписать к потребностям, конечно!) следует за самой простой идеей: суммировать размеры файлов (или, более точно, пакеты в случае distribute
) только в порядке они были перечислены, не делайте никаких перестановок.
"Автостопщики ведут Haskell", относится к проблеме оптимизации больше серьезно и предлагает варианты программы, которые попытались бы перестроить файлы энергично для них, чтобы соответствовать лучше на дисках (и потребовать меньшего количества дисков):
Достаточно предварительных выборов уже. давайте пойдем, упаковывают некоторые CD.
Поскольку Вы, возможно, уже распознали, нашей проблемой является классическая. Это называют, "задача о ранце" (погуглите его, если Вы уже не знаете, каково это. Существует больше чем 100 000 ссылок).
давайте начнем с жадного решения...
(читайте больше в Главе 3 и далее.)
Мне сказали также, что Debian использует инструмент для создания его CD дистрибутива, который более умен, чем мой distribute
наборы w.r.t. пакетов: его результаты более хороши, потому что это заботится о зависимостях межпакета и попыталось бы сделать набор пакетов, который входит в первый диск, закрытый под зависимостями, т.е. никакой пакет от 1-го диска не должен требовать пакета от другого диска (или по крайней мере, я сказал бы, количество таких зависимостей должно быть минимизировано).
backup2l может сделать большую эту работу. Даже если Вы не используете пакет непосредственно, Вы могли бы получить некоторые идеи сценария от него.
rar
archiver может быть проинструктирован для автоматического разделения архива, который он создает в блоки определенного размера с -vsize
флаг.
Архивацию того дерева каталогов называют foo
в блоки, скажем, 500 мегабайтов за штуку Вы указали бы
rar a backup.rar -v500m foo/
rar
, если Вы не распаковываете каждую "часть" снова в ее собственный каталог, который, конечно, не будет работать, так как части не разработаны как этот и не разделены на границах файла.
– MattBianco
28.03.2011, 14:16
tar
+split
- как результаты, затем существует также dar; вот примечание о его соответствующей функции: "(ЧАСТИ), это было разработано, чтобы смочь разделить архив по нескольким съемным носителям вообще их число, и независимо от того, что их размер". По сравнению с tar
+split
, Я принимаю, это позволяет некоторым более легким способам получить доступ к заархивированным файлам. (BTW, это имеет также сходство функции distribute
: "ДИФФЕРЕНЦИАЛЬНОЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ" и "СНИМОК ДЕРЕВА КАТАЛОГОВ", но нельзя понравиться это, результатом является специальный формат, не ISO с деревом dir.)
– imz -- Ivan Zakharyaschev
30.03.2011, 02:43
Можно также попробовать fpart, инструмент, который я записал (BSD-лицензированный): https://sourceforge.net/projects/fpart/
genisoimage
пакет. – nograpes 21.02.2014, 18:36