ProHoster > Blog > Uprava > Prenos 16 GB torrenta prek tablice s 4 GB prostega prostora
Prenos 16 GB torrenta prek tablice s 4 GB prostega prostora
Naloga:
Obstaja osebni računalnik brez interneta, vendar je mogoče prenesti datoteko prek USB-ja. Obstaja tablica z internetom, s katere je mogoče prenesti to datoteko. Zahtevani torrent lahko prenesete na svoj tablični računalnik, vendar ni dovolj prostega prostora. Datoteka v torrentu je ena in velika.
Pot do rešitve:
Zagnal sem torrent za prenos. Ko je prostega prostora skoraj zmanjkalo, sem prenos zaustavil. Tablico sem povezal z računalnikom in datoteko iz tablice prestavil v računalnik. Zaustavil sem se in na moje presenečenje je bila datoteka znova ustvarjena in torrent se je nalagal naprej, kot da se ni nič zgodilo.
Ker torrent odjemalec nastavi datoteko, v katero zapisuje prejete podatke, zastavico sparse, sistem ne poskuša rezervirati 16 GB naenkrat in ne bo prišlo do napake pri poskusu pisanja v datoteko, večjo od 4 GB.
Po štirikratni ponovitvi postopka sem na svoj računalnik prejel štiri datoteke z različnimi deli istega torrenta. Zdaj jih preostane le še sestaviti. Postopek je v bistvu preprost. Ničelne bajte morate zamenjati z drugo vrednostjo, če obstaja na danem mestu v eni od štirih datotek.
Zdelo se mi je, da bi moral biti tako preprost program na internetu. Se še nihče ni srečal s tako težavo? Vendar sem ugotovil, da sploh ne vem, katere ključne besede naj iščem. Zato sem hitro ustvaril skript Lua za to nalogo in zdaj sem ga optimiziral. To želim deliti.
Prenos torrenta po delih
začnite prenašati torrent na prvi napravi
počakajte, da se ROM napolni
začasno ustavite prenos
prenesite datoteko v drugo napravo in imenu datoteke dodajte številko
vračamo se na prvo točko, dokler se datoteka v celoti ne prenese
Združevanje delov v eno datoteko
Po prejemu zadnjega dela jih je potrebno zbrati v eno celotno datoteko.
Naloga je preprosta:
Branje vseh delov hkrati
Če v nekem delu pozicija ni ničelni bajt, potem to zapišemo na izhod, drugače pa ničlo
Funkcija merge_part sprejme niz niti streams_in od tega se glasi del velikosti buffer_length in vrne rezultat združevanja delov iz različnih niti.
function merge_part(streams_in, buffer_length)
local out_part
for _, stream in ipairs(streams_in) do
local in_part = stream:read(buffer_length)
if not out_part then
out_part = in_part -- просто копируем часть из первого файла
elseif in_part and #in_part > 0 then
if #out_part < #in_part then
out_part, in_part = in_part, out_part
end
if out_part ~= in_part -- данные различаются
and in_part:find("[^ ]") -- есть данные в in_part
and out_part:find(" ", 1, true) -- есть пустые места в out_part
then
local find_index = 1
--[[
Funkcija string.gsub je primeren za nalogo, ker bo našel kose, napolnjene z ničlami, in dostavil, kar mu je dano.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub ne izraža položaja, na katerem je bilo ujemanje. Zato vzporedno iščemo položaj zero_string uporabo funkcije string.find. Dovolj je najti prvi ničelni bajt.
Zdaj, če v in_part obstajajo podatki za out_part kopirajte jih.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
Izrezano iz in_part del, ki ustreza zaporedju ničel.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part obstajajo podatki.
--]]
if #part == #zero_string then
return part
else
--[[
part se je izkazalo za manjše od zaporedja ničel. Dopolnimo ga z njimi.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
Zaključek
Tako smo lahko prenesli in sestavili to datoteko na osebnem računalniku. Po združitvi sem torrent datoteko potegnil iz tablice. Na računalnik sem namestil torrent odjemalca in z njim preveril datoteko.
Zadnji preneseni del na tablici lahko pustite na distribuciji, vendar morate pred tem omogočiti ponovno preverjanje delov in odkljukati datoteko, da se ne naloži znova.
Rabljeno:
Flud torrent odjemalec na tablici.
Torrent odjemalec qBittorent na osebnem računalniku.