16GB์˜ ์—ฌ์œ  ๊ณต๊ฐ„์ด ์žˆ๋Š” ํƒœ๋ธ”๋ฆฟ์„ ํ†ตํ•ด 4GB ํ† ๋ ŒํŠธ ๋‹ค์šด๋กœ๋“œ

16GB์˜ ์—ฌ์œ  ๊ณต๊ฐ„์ด ์žˆ๋Š” ํƒœ๋ธ”๋ฆฟ์„ ํ†ตํ•ด 4GB ํ† ๋ ŒํŠธ ๋‹ค์šด๋กœ๋“œ

์ž‘์—… :

์ธํ„ฐ๋„ท์ด ์—†๋Š” PC๊ฐ€ ์žˆ์ง€๋งŒ USB๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์ „์†ก์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋„ท์ด ์—ฐ๊ฒฐ๋œ ํƒœ๋ธ”๋ฆฟ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํƒœ๋ธ”๋ฆฟ์—์„œ ํ•„์š”ํ•œ ํ† ๋ ŒํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์œ  ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ† ๋ ŒํŠธ์— ์žˆ๋Š” ํŒŒ์ผ์€ ํ•˜๋‚˜์ด๊ณ  ํฝ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜ ๊ฒฝ๋กœ:

๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•ด ํ† ๋ ŒํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์œ  ๊ณต๊ฐ„์ด ๊ฑฐ์˜ ์—†์–ด์ง€์ž ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒœ๋ธ”๋ฆฟ์„ PC์— ์—ฐ๊ฒฐํ•˜๊ณ  ํƒœ๋ธ”๋ฆฟ์— ์žˆ๋˜ ํŒŒ์ผ์„ PC๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ๋ฉˆ์ท„๋”๋‹ˆ ๋†€๋ž๊ฒŒ๋„ ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ์•„๋ฌด ์ผ๋„ ์—†์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ† ๋ ŒํŠธ๊ฐ€ ๊ณ„์† ๋‹ค์šด๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ† ๋ ŒํŠธ ํด๋ผ์ด์–ธํŠธ๋Š” ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ํŒŒ์ผ์— sparse ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์€ ํ•œ ๋ฒˆ์— 16GB๋ฅผ ์˜ˆ์•ฝํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์œผ๋ฉฐ, 4GB๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ํŒŒ์ผ์— ์“ฐ๋ ค๊ณ  ํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ ˆ์ฐจ๋ฅผ XNUMX๋ฒˆ ๋ฐ˜๋ณตํ•œ ํ›„ ๋™์ผํ•œ ํ† ๋ ŒํŠธ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ํฌํ•จ๋œ ํŒŒ์ผ XNUMX๊ฐœ๋ฅผ ๋‚ด PC์— ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ๊ทธ๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ์ ˆ์ฐจ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. XNUMX๊ฐœ ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์˜ ์ง€์ •๋œ ์œ„์น˜์— XNUMX๋ฐ”์ดํŠธ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ XNUMX๋ฐ”์ดํŠธ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์ธํ„ฐ๋„ท์— ์žˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ๊ทธ๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๊ฒช์€ ์ ์ด ์—†์Šต๋‹ˆ๊นŒ? ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ• ์ง€์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์–ด์š”. ๋”ฐ๋ผ์„œ ์ €๋Š” ์ด ์ž‘์—…์„ ์œ„ํ•ด ์‹ ์†ํ•˜๊ฒŒ Lua ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ  ์ด์ œ ์ด๋ฅผ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ† ๋ ŒํŠธ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ

  1. ์ฒซ ๋ฒˆ์งธ ์žฅ์น˜์—์„œ ํ† ๋ ŒํŠธ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š”
  2. ROM์ด ๊ฐ€๋“ ์ฐฐ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์‹ญ์‹œ์˜ค
  3. ๋‹ค์šด๋กœ๋“œ ์ผ์‹œ์ค‘์ง€
  4. ํŒŒ์ผ์„ ๋‘ ๋ฒˆ์งธ ์žฅ์น˜๋กœ ์ „์†กํ•˜๊ณ  ํŒŒ์ผ ์ด๋ฆ„์— ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
  5. ํŒŒ์ผ์ด ์™„์ „ํžˆ ๋‹ค์šด๋กœ๋“œ๋  ๋•Œ๊นŒ์ง€ ์ฒซ ๋ฒˆ์งธ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ถ€๋ถ„์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉ

๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์„ ๋ฐ›์€ ํ›„์—๋Š” ์ด๋ฅผ ํ•˜๋‚˜์˜ ์ „์ฒด ํŒŒ์ผ๋กœ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ชจ๋“  ๋ถ€๋ถ„์„ ํ•œ ๋ฒˆ์— ์ฝ๊ธฐ
  2. ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ์œ„์น˜๊ฐ€ XNUMX๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ถœ๋ ฅ์— ์“ฐ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด XNUMX์„ ์”๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ merge_part ์Šค๋ ˆ๋“œ ๋ฐฐ์—ด์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. streams_in ๊ทธ ์ค‘ ํฌ๊ธฐ์˜ ์ผ๋ถ€๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. buffer_length ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ๋ถ€ํ’ˆ์„ ๋ณ‘ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

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
--[[

๊ธฐ๋Šฅ string.gsub ์€ XNUMX์œผ๋กœ ์ฑ„์›Œ์ง„ ์กฐ๊ฐ์„ ์ฐพ์•„์„œ ์ฃผ์–ด์ง„ ๊ฒƒ์„ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

--]]
                out_part = out_part:gsub(" +", function(zero_string)

                    if #in_part < find_index then
                        return -- ะฝะต ะฝะฐ ั‡ั‚ะพ ะผะตะฝัั‚ัŒ
                    end
--[[

string.gsub ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ๋ฐœ๊ฒฌ๋œ ์œ„์น˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์œ„์น˜์— ๋Œ€ํ•ด ๋ณ‘๋ ฌ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. zero_string ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ string.find. ์ฒซ ๋ฒˆ์งธ XNUMX๋ฐ”์ดํŠธ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

--]]
                    local start_index = out_part:find(" ", find_index, true)
                    find_index = start_index + #zero_string

--[[

์ด์ œ ๋งŒ์•ฝ์— in_part ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค out_part ๋ณต์‚ฌํ•˜์„ธ์š”.

--]]
                    if #in_part >= start_index then
                        local end_index = start_index + #zero_string - 1
--[[

์ž˜๋ผ๋‚ด๊ธฐ in_part XNUMX์˜ ์‹œํ€€์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

--]]
                        local part = in_part:sub(start_index, end_index)

                        if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[

ะ’ part ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

--]]
                            if #part == #zero_string then
                                return part
                            else
--[[

part ์ผ๋ จ์˜ XNUMX๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค๋กœ ๋ณด์ถฉํ•ฉ์‹œ๋‹ค.

--]]
                                return part..zero_string:sub(1, end_index - #in_part)
                            end
                        end
                    end
                end)
            end
        end
    end
    return out_part
end

๊ฒฐ๋ก 

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ด ํŒŒ์ผ์„ PC์— ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ณ‘ ํ›„ ํƒœ๋ธ”๋ฆฟ์—์„œ ํ† ๋ ŒํŠธ ํŒŒ์ผ์„ ๊บผ๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋‚ด PC์— ํ† ๋ ŒํŠธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ทธ๊ฒƒ์œผ๋กœ ํŒŒ์ผ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๋ธ”๋ฆฟ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ๋ถ€๋ถ„์€ ๋ฐฐํฌํŒ์— ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ์ „์— ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋‹ค์‹œ ํ™•์ธํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ  ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ๋˜์ง€ ์•Š๋„๋ก ํŒŒ์ผ์˜ ์„ ํƒ์„ ์ทจ์†Œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋œ:

  1. ํƒœ๋ธ”๋ฆฟ์˜ Flud ํ† ๋ ŒํŠธ ํด๋ผ์ด์–ธํŠธ.
  2. PC์˜ ํ† ๋ ŒํŠธ ํด๋ผ์ด์–ธํŠธ qBittorent.
  3. ๋ฃจ์•„ ์Šคํฌ๋ฆฝํŠธ

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€