დაზიანებული chunk თითქმის ყოველთვის ერთ region ფაილშია ჩაკეტილი, და გამოსავალი თითქმის ყოველთვის ამ ერთი ფაილის - ან მის შიგნით დაზიანებული chunk-ების - შეცვლაა და არა მთელი სამყაროსი. იპოვე კოორდინატები სერვერის ლოგში, გაარკვიე, რომელი r.X.Z.mca ფაილი შეიცავს მათ, გააჩერე სერვერი და ან ეს ფაილი backup-იდან აღადგინე, ან ცუდი chunk-ები წაშალე, რომ ხელახლა დაგენერირდნენ. მეორე ვარიანტისთვის ინსტრუმენტი MCA Selector-ია. ამ პოსტში დანარჩენი ყველაფერი ეხება იმას, როგორ გააკეთო ეს ზუსტად, როგორ ამოიცნო შეცდომები, რომლებიც დაზიანებას ჰგავს, მაგრამ არ არის, და როგორ გახადო განმეორება ნაკლებად სავარაუდო.
როგორ ინახება Minecraft-ის სამყარო#
Java Edition-ის სამყარო პატარა ფაილების საქაღალდეა და არა ერთი დიდი ფაილი. სწორედ ამიტომ არის დაზიანება ჩვეულებრივ ლოკალური.
| გზა | რას შეიცავს |
|---|---|
level.dat | სამყაროს პარამეტრები, seed, დრო, თამაშის წესები, მონაცემების ვერსია |
level.dat_old | level.dat-ის წინა ასლი |
region/r.X.Z.mca | ბლოკები და block entity-ები 32 x 32 chunk-ისთვის |
entities/r.X.Z.mca | მობები, ნივთები, armour stand-ები (1.17 და შემდეგ) |
poi/r.X.Z.mca | ინტერესის წერტილები: საწოლები, სამუშაო ბლოკები, პორტალები |
playerdata/<uuid>.dat | თითოეული მოთამაშის ინვენტარი, პოზიცია და სტატისტიკა |
data/ | რუკები, raid-ები, scoreboard-ები, სტრუქტურების მონაცემები |
ყოველი region ფაილი 32-ზე 32 chunk-ს ფარავს, ანუ 512-ზე 512 ბლოკს. შიგნით ფაილი 8 KiB-იანი header-ით იწყება - ცხრილი, რომელიც ამბობს, სად ინახება თითოეული 1,024 chunk-იდან, და დროის ნიშნულების ცხრილი - რასაც თავად chunk-ები მოსდევს, თითოეული შეკუმშული და 4 KiB-იან სექტორებში შენახული.
Paper-სა და Spigot-ზე nether და end ცალკე სამყაროს საქაღალდეებია: world_nether/DIM-1/region/ და world_the_end/DIM1/region/. Vanilla-ზე ისინი მთავარი სამყაროს საქაღალდის შიგნითაა, world/DIM-1/-სა და world/DIM1/-ში. ფაილის ძებნამდე შეამოწმე, რომელი განლაგება გაქვს.
ბლოკის კოორდინატებიდან region ფაილამდე
არითმეტიკა მოკლეა:
chunk X = floor(block X / 16)chunk Z = floor(block Z / 16)region X = floor(chunk X / 32)region Z = floor(chunk Z / 32)ასე რომ, ბლოკი X -1200, Z 3400 არის chunk -75, 212-ში, რომელიც region -3, 6-შია: ფაილი r.-3.6.mca. ყურადღება მიაქციე floor-ს: უარყოფითი კოორდინატები ქვემოთ მრგვალდება, ამიტომ ბლოკი -1 არის chunk -1-სა და region -1-ში და არა 0-ში. თამაშში F3 ეკრანი პირდაპირ აჩვენებს chunk-სა და region ფაილის სახელს იქ, სადაც დგახარ, რაც გამოთვლების შემოწმების ყველაზე სწრაფი გზაა.
რას ნიშნავს ლოგის შეცდომები სინამდვილეში#
დაზიანება სერვერის ლოგში ჩანს, ხშირად stack trace-ის სახით, რომელიც იმდენად გრძელია, რომ სასარგებლო ხაზს მალავს. ეს გავრცელებული შეტყობინებებია და რაზე მიუთითებენ.
`Chunk file at [x, z] is in the wrong location; relocating. (Expected [a, b], got [c, d])` - chunk-ის შენახული კოორდინატები region ფაილში მის პოზიციას არ ემთხვევა. ჩვეულებრივ შედეგია იმისა, რომ ვინმემ region ფაილები დააკოპირა ან გადაარქვა სახელი, ან ძველი გარე ინსტრუმენტისა. სერვერი chunk-ს გადაიტანს და აგრძელებს. სასწრაფო არ არის, მაგრამ გაარკვიე, ვინ გადაიტანა ფაილები.
`Couldn't load chunk [x, z]` და მის შემდეგ გამონაკლისი - chunk-ის მონაცემები ვერ წაიკითხა. ქვემოთ მოცემული გამონაკლისი ამბობს, რატომ: გაშლის შეცდომა (ZipException, "incorrect header check", "unexpected end of ZLIB input stream") ნიშნავს, რომ შენახული ბაიტები დაზიანებულია; NBT-ის წაკითხვის შეცდომა ნიშნავს, რომ მონაცემები გაიშალა, მაგრამ ვალიდური არ არის. სერვერი ჩვეულებრივ chunk-ს ხელახლა დააგენერირებს, რაც ნიშნავს, რომ იქ არსებული რელიეფი ან ნაგებობები ახალი გენერაციით ჩანაცვლდება - შეამოწმე ადგილი თამაშში.
Region ფაილის შეცდომები, რომლებიც შეკვეცილ ფაილს ან არავალიდურ სექტორს ახსენებს - region ფაილის header ფაილის ბოლოს მიღმა მიუთითებს, ჩვეულებრივ იმიტომ, რომ პროცესი ჩაწერის დროს გაჩერდა. Paper დაზიანებული header-ის აღდგენას ფაილის სკანირებით ცდილობს და ლოგში წერს, რომ ამას აკეთებს; გადარჩება თუ არა chunk-ები, დამოკიდებულია იმაზე, რამდენი ჩაიწერა.
შეცდომები, რომლებიც entity-ს ან block entity-ს ასახელებს - ერთი ცუდი მობი, item frame, სკივრი ან ნიშანი სხვაგვარად ნორმალურ chunk-ში. ხშირად plugin-მა ან mod-მა ჩაწერა მონაცემები, რომლებსაც სერვერი ვერ კითხულობს. Crash report-ის "Entity being ticked" ან "Block entity being ticked" სექცია კოორდინატებს გაძლევს. Crash report-ების ახსნა აჩვენებს, როგორ წაიკითხო ეს სექცია.
სამყარო სრულიად ახალია ან გაშვებისას `level.dat`-ის შეცდომებია - level.dat აკლია ან ვერ იკითხება. ეს ერთადერთი ფაილია, რომლის დაკარგვაც მთელ სამყაროზე მოქმედებს; ქვემოთ განიხილება.
რა იწვევს დაზიანებას#
Region ფაილები მუდმივად გადაიწერება, რაც ჩაწერის მომენტს საშიშს ხდის. თითქმის ყველა შემთხვევა ერთ-ერთზე დადის:
- პროცესი ჩაწერის შუაში გაჩერდა. Kill სუფთა გაჩერების ნაცვლად, მეხსიერების ამოწურვით შეწყვეტა, ჰოსტის კრაში. რაც იმ წამს იწერებოდა, შეიძლება ნახევრად იყოს.
- დისკი გაივსო. ჩაწერა, რომელიც ვერ სრულდება, შეკვეცილ ფაილს ტოვებს. ჩვეულებრივი დამნაშავეები დისკის შემვსები backup-ები და ლოგებია; დისკის ადგილი განიხილავს, რა ჭამს მას.
- ფაილები სერვერის მუშაობისას დარედაქტირდა. Region ფაილის ატვირთვა, MCA Selector-ის ან რედაქტორის გაშვება ცოცხალ სამყაროზე, ან backup-ის აღდგენა გაშვებულ სერვერში. სერვერის შემდეგი შენახვა შენს ცვლილებას გადააწერს ან მასთან აირევა.
- ვერსიების შეუსაბამობა. სამყაროს გახსნა Minecraft-ის უფრო ძველ ვერსიაში, ვიდრე რომელშიც შეინახა, ან გარე ინსტრუმენტის გამოყენება, რომელსაც ამჟამინდელი ფორმატი არ ესმის. მონაცემები შეიძლება დაიკარგოს ან არასწორად წაიკითხოს.
- Plugin-ები და mod-ები ცუდ მონაცემებს წერენ. Plugin, რომელიც block entity-ში ან entity-ში არასწორ მონაცემებს ინახავს, რომელთა ჩატვირთვაც შემდეგ სერვერს არ შეუძლია.
- ნამდვილი შენახვის გაუმართაობა. იშვიათია თანამედროვე აპარატურაზე checksum-ის მქონე ფაილური სისტემებით, მაგრამ იაფ მანქანებზე შეუძლებელი არ არის.
მათი უმეტესობის თავიდან აცილება შეიძლება, რასაც ეს პოსტის ბოლო სექცია ეძღვნება.
დაზიანების პოვნა#
დაიწყე ლოგიდან. მოძებნე მასში შეცდომის კოორდინატები და ზემოთ აღწერილი წესით region ფაილად გადაიყვანე. თუ შეცდომა chunk-ის კოორდინატებს იძლევა (უმეტესობა იძლევა), მხოლოდ მეორე ნაბიჯი გჭირდება.
$ grep -n "Couldn't load chunk\|wrong location\|region" logs/latest.log | tail -20პანელზე იგივე საქმეს აკეთებს კონსოლის ძებნა ან ჩამოტვირთული logs/latest.log; ძველი ლოგები იმავე საქაღალდეში gzip-ით შეკუმშულია, როგორც YYYY-MM-DD-N.log.gz.
შემდეგ წადი და ფრთხილად შეხედე. Spectator რეჟიმში კოორდინატებთან ახლოს გადადი - არა მათში - და ნახე, როგორ გამოიყურება chunk: გამქრალი ნაგებობები, ახლად გენერირებული რელიეფი, რომელიც ბაზას კვეთს, სწორკიდიანი ხვრელი void-ში. ნაგებობის შუაში ხელახლა დაგენერირებულ chunk-ს მკვეთრი 16-ბლოკიანი საზღვარი აქვს, რომლის აღრევაც ძნელია.
თუ სხვადასხვა region-ში რამდენიმე chunk არის დაზიანებული, რემონტამდე საერთო მიზეზი მოძებნე. ერთდროული დაზიანება ბევრ region-ში დისკის გავსებაზე ან კრაშზე მიუთითებს, და შეიძლება იმაზე მეტი იყოს, ვიდრე იპოვე.
რემონტი MCA Selector-ით#
MCA Selector არის უფასო, ღია კოდის დესკტოპ აპლიკაცია region ფაილების სანახავად და დასარედაქტირებლად. ის სამყაროს რუკად აჩვენებს, chunk-ების ხელით ან მოთხოვნით მონიშვნის საშუალებას გაძლევს და შეუძლია მათი წაშლა, ექსპორტი ან იმპორტი. ეს chunk-ის დონის ქირურგიის სტანდარტული ინსტრუმენტია.
იმუშავე ასლზე, არასოდეს ცოცხალ სერვერზე:
- გააჩერე სერვერი და SFTP-ით ჩამოტვირთე სამყაროს საქაღალდე, ან მინიმუმ დაზიანებული განზომილების
region,entitiesდაpoiსაქაღალდეები. კავშირის დეტალები მოცემულია სტატიაში SFTP და ფაილების მენეჯერი. - გახსენი სამყაროს საქაღალდე MCA Selector-ში. დაზიანებული chunk-ები ხშირად ცარიელად ჩანს ან ინსტრუმენტი მათზე წაკითხვის მცდელობისას გატყობინებს.
- მონიშნე დაზიანებული chunk-ები.
- წაშალე ისინი, ან backup-იდან შემცვლელები შემოიტანე (ორივე ვარიანტი ქვემოთაა ახსნილი).
- შეინახე, შეცვლილი ფაილები გაჩერებულ სერვერზე ატვირთე, გაუშვი და ადგილი თამაშში შეამოწმე.
მე-4 ნაბიჯის არჩევანი წყვეტს, როგორ გამოიყურება ადგილი შემდეგ:
- წაშლა - chunk-ები შემდეგ ჩატვირთვაზე seed-იდან ხელახლა დაგენერირდება. სწორია ველური ბუნებისთვის, არასწორი ნაგებობებისთვის.
- Backup-იდან იმპორტი - MCA Selector-ს შეუძლია chunk-ების იმპორტი სამყაროს სხვა ასლიდან, ამიტომ შეგიძლია წუხანდელი backup-იდან მხოლოდ ეს chunk-ები აიღო, დანარჩენი ყველაფერი კი დღევანდელ მდგომარეობაში დატოვო.
MCA Selector-ის მოთხოვნის ფილტრი ასევე სწორი ინსტრუმენტია სხვა, მსგავსი ამოცანისთვის: სამყაროს შეკვეცისთვის. Chunk-ების InhabitedTime-ით მონიშვნა (რამდენი დრო გაატარეს მათში მოთამაშეებმა) პოულობს chunk-ებს, რომლებიც დაგენერირდა, მაგრამ რეალურად არასოდეს მოინახულეს, და მათი წაშლა გაბერილ სამყაროს ამცირებს ბაზებთან შეხების გარეშე. World border და წინასწარი გენერაცია ხსნის, რატომ იბერება სამყაროები საერთოდ.
MCA Selector განახლებული შეინახე. Region-ის ფორმატი Minecraft-ის ვერსიებს შორის იცვლება, და ნებისმიერი გარე ინსტრუმენტის ძველი ასლი დაზიანების მიზეზია და არა მისი გამოსავალი.
ერთი region ფაილის აღდგენა backup-იდან#
როცა დაზიანებული ადგილი ნაგებობაა და backup გაქვს, region ფაილის აღდგენა chunk-ის ქირურგიაზე სწრაფია და კარგავს მხოლოდ იმას, რაც ამ 512-ზე-512 კვადრატში backup-ის შემდეგ შეიცვალა.
- გააჩერე სერვერი.
- Backup-იდან აიღე დაზიანებული region-ის
region/r.X.Z.mca. ასევე აიღე იმავე სახელისentities/r.X.Z.mcaდაpoi/r.X.Z.mca, რომ მობები, item frame-ები, villager-ების სამუშაო ბლოკები და საწოლები ბლოკებს შეესაბამებოდეს. - დააკოპირე ისინი სერვერზე ამჟამინდელი ფაილების თავზე.
- გაუშვი სერვერი და ადგილი შეამოწმე.
რას კარგავ: ამ კვადრატში backup-ის შემდეგ გაკეთებულ ნებისმიერ მშენებლობას. რას ინარჩუნებ: სამყაროში დანარჩენ ყველაფერს და ყველა მოთამაშის ინვენტარს, რადგან ინვენტარები playerdata-შია და არა region-ში. თუ მოთამაშემ backup-ის აღების შემდეგ აღდგენილი region-ის შიგნით სკივრებში ნივთები შეინახა, ისინი გაქრა; გააფრთხილე.
RE:NODE-ზე backup-ების ჩამოტვირთვა პანელიდან შეიძლება, ამიტომ შეგიძლია ერთი ლოკალურად გახსნა, სამი ფაილი ამოიღო და მხოლოდ ისინი ფაილების მენეჯერით ატვირთო - მთელი backup-ის აღდგენისა და ყველა სხვა მოთამაშის პროგრესის უკან დაბრუნების ნაცვლად. სრული აღდგენა ერთი ღილაკია, როცა ის მართლა გჭირდება. ნებისმიერ შემთხვევაში backup-ები, რომლებიც მართლა აღდგება არის არგუმენტი იმისთვის, რომ ეს იმ დღემდე გამოსცადო, როცა დაგჭირდება.
level.dat-ისა და playerdata-ს დაზიანება#
`level.dat` ინახავს seed-ს, spawn-ის წერტილს, თამაშის წესებსა და სამყაროს პარამეტრებს. თუ დაზიანებულია, სერვერმა შეიძლება ახალი სამყარო შექმნას ან გაშვებაზე უარი თქვას. Minecraft წინა ვერსიას level.dat_old-ად ინახავს: გააჩერე სერვერი, დაზიანებულ ფაილს სახელი გადაარქვი და გვერდზე გადადე, დააკოპირე level.dat_old როგორც level.dat და ისევ გაუშვი. თუ ორივე დაზიანებულია, აიღე level.dat ნებისმიერი backup-იდან - ის დღიდან დღემდე ცოტას იცვლება, და ძველი მხოლოდ სამყაროს დროსა და რამდენიმე მთვლელს დააბრუნებს.
მოთამაშის ფაილები ინახება playerdata/<uuid>.dat-ში, თითოეულის გვერდით .dat_old ასლით. მოთამაშეს, რომლის ინვენტარიც გაქრა ან რომელიც კრაშის შემდეგ სამყაროს spawn-ზე ცარიელი ჩნდება, შეიძლება დაზიანებული ფაილი ჰქონდეს; _old ასლი ჩვეულებრივ ერთი შენახვით უკანაა. აღადგინე გაჩერებული სერვერით, ან მინიმუმ offline მოთამაშით, რადგან სერვერი ფაილს გასვლისას წერს.
playerdata/ 4c2a9b1e-....dat 4c2a9b1e-....dat_oldდაზიანების თავიდან აცილება#
აქ არაფერია რთული, და სერვერების უმეტესობამ, რომელმაც chunk-ები დაკარგა, ერთ-ერთი ეს გამოტოვა:
- გააჩერე სუფთად.
stopკონსოლში ყველა სამყაროს ინახავს და გადის. პროცესის მოკვლა - არა. RE:NODE-ზე Stop და Restart ღილაკები სუფთა გაჩერებას აგზავნიან; Kill - არა, და ის სერვერისთვისაა, რომელიც აღარ პასუხობს. - დარჩი მეხსიერების ლიმიტში. სერვერი, რომელიც მეხსიერების ამოწურვის გამო მოკლეს, სუფთად არ გაჩერებულა. თუ შენი სერვერი განმეორებით აღწევს ლიმიტს, ეს დაზიანების რისკიცაა და სტაბილურობის პრობლემაც - რამდენი RAM სჭირდება Minecraft სერვერს და რატომ გადაიტვირთება შენი თამაშის სერვერი ნიშნებს ხსნიან.
- შეინარჩუნე თავისუფალი ადგილი დისკზე. სერვერის დისკს არასოდეს მისცე გავსების საშუალება. ძველი ლოგები, სერვერის საქაღალდეში შენახული ძველი backup-ები და მიტოვებული სამყაროები ადგილის ჩვეულებრივი მჭამელებია.
- ცოცხალ სამყაროს არასოდეს დაარედაქტირო. სამყაროს საქაღალდეებში რამის ატვირთვამდე, აღდგენამდე ან რედაქტირებამდე სერვერი გააჩერე.
- გააკეთე თანმიმდევრული backup-ები. Backup-მა, რომელიც chunk-ების ჩაწერისას აიღეს, შეიძლება ნახევრად ჩაწერილი ფაილი დაიჭიროს. გამოიყენე
save-off,save-all flush, გააკეთე backup, შემდეგsave-on- ან backup-ისთვის სერვერი გააჩერე - რომ ასლი თანმიმდევრული იყოს. სამყაროს backup-ის გზამკვლევი ამას დეტალურად გადის. - განაახლე ერთი მიმართულებით. სამყარო არასოდეს გახსნა იმაზე ძველ ვერსიაში, რომელშიც ბოლოს შეინახა. განახლებამდე გააკეთე backup; განახლების შემდეგ ამ backup-ის გარეშე უკან გზა აღარ არის. Minecraft-ის ვერსიების განახლებები უსაფრთხო თანმიმდევრობას განიხილავს.
save-offsave-all flush# take the backup heresave-onFAQ#
შეიძლება დაზიანებული chunk სამყაროს დანარჩენ ნაწილზე გავრცელდეს?
არა. ყოველი chunk დამოუკიდებლად ინახება და ცუდი chunk მეზობლებს არ აზიანებს. ვრცელდება მიზეზი: თუ დისკი გაივსო ან სერვერი მოკლეს, იმავე დროს ჩაწერილი სხვა ფაილებიც შეიძლება დაზიანდეს, ამიტომ ლოგში ერთზე მეტი შეცდომა მოძებნე.
დაზიანებული chunk-ის წაშლა ჩემს ნაგებობას წაშლის?
დიახ, თუ ნაგებობა მასში იყო. წაშლილი chunk seed-იდან ახალ რელიეფად დაგენერირდება. წაშლა ველური ბუნებისთვის გამოიყენე, ხოლო ყველაფრისთვის, რაც მოთამაშეებმა ააშენეს, backup-იდან აღდგენა.
აქვს Minecraft-ს ჩაშენებული სარემონტო ბრძანება?
დაზიანებული მონაცემებისთვის არა. სერვერის --forceUpgrade ოფცია ყოველ chunk-ს ამჟამინდელ ფორმატში გადაწერს, რაც შეიძლება დაეხმაროს ძველი ფორმატის chunk-ებს განახლების შემდეგ, მაგრამ დაზიანებულ ბაიტებს არ ასწორებს. Region-ის რემონტი გარე ინსტრუმენტებით ან backup-ებით კეთდება.
კრაშის შემდეგ ჩემი სამყარო ახალ რუკად გადაიქცა. ყველაფერი გაქრა?
სავარაუდოდ არა. შეამოწმე, ისევ ემთხვევა თუ არა server.properties-ში level-name სამყაროს საქაღალდეს და არსებობს თუ არა level.dat. თუ level.dat დაზიანებულია, აღადგინე level.dat_old-იდან. Region ფაილები შენი ყველა ნაგებობით ჩვეულებრივ ხელუხლებელია.
უსაფრთხოა MCA Selector-ის გაშვება ცოცხალ სერვერზე?
არა. ყოველთვის ჯერ სერვერი გააჩერე და ასლზე იმუშავე. სერვერი chunk-ებს მეხსიერებაში ინახავს და შემდეგ შენახვაზე შენს ცვლილებებს გადააწერს, ან ჩაწერებს შენსას შეურევს.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.